力扣:71:简化路径
This commit is contained in:
parent
0184d9757e
commit
1a2954eb18
104
LeetCode/src/main/java/leetcode/editor/cn/SimplifyPath.java
Normal file
104
LeetCode/src/main/java/leetcode/editor/cn/SimplifyPath.java
Normal file
@ -0,0 +1,104 @@
|
||||
//给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
|
||||
//
|
||||
// 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成
|
||||
//部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
|
||||
//
|
||||
// 请注意,返回的 规范路径 必须遵循下述格式:
|
||||
//
|
||||
//
|
||||
// 始终以斜杠 '/' 开头。
|
||||
// 两个目录名之间必须只有一个斜杠 '/' 。
|
||||
// 最后一个目录名(如果存在)不能 以 '/' 结尾。
|
||||
// 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
|
||||
//
|
||||
//
|
||||
// 返回简化后得到的 规范路径 。
|
||||
//
|
||||
//
|
||||
//
|
||||
// 示例 1:
|
||||
//
|
||||
//
|
||||
//输入:path = "/home/"
|
||||
//输出:"/home"
|
||||
//解释:注意,最后一个目录名后面没有斜杠。
|
||||
//
|
||||
// 示例 2:
|
||||
//
|
||||
//
|
||||
//输入:path = "/../"
|
||||
//输出:"/"
|
||||
//解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。
|
||||
//
|
||||
//
|
||||
// 示例 3:
|
||||
//
|
||||
//
|
||||
//输入:path = "/home//foo/"
|
||||
//输出:"/home/foo"
|
||||
//解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
|
||||
//
|
||||
//
|
||||
// 示例 4:
|
||||
//
|
||||
//
|
||||
//输入:path = "/a/./b/../../c/"
|
||||
//输出:"/c"
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 提示:
|
||||
//
|
||||
//
|
||||
// 1 <= path.length <= 3000
|
||||
// path 由英文字母,数字,'.','/' 或 '_' 组成。
|
||||
// path 是一个有效的 Unix 风格绝对路径。
|
||||
//
|
||||
// Related Topics 栈 字符串
|
||||
// 👍 260 👎 0
|
||||
|
||||
package leetcode.editor.cn;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
//71:简化路径
|
||||
public class SimplifyPath {
|
||||
public static void main(String[] args) {
|
||||
//测试代码
|
||||
Solution solution = new SimplifyPath().new Solution();
|
||||
solution.simplifyPath("/home/");
|
||||
}
|
||||
|
||||
//力扣代码
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
class Solution {
|
||||
public String simplifyPath(String path) {
|
||||
Stack<String> stack = new Stack<>();
|
||||
while (path.contains("//")) {
|
||||
path = path.replace("//", "/");
|
||||
}
|
||||
String[] paths = path.split("/");
|
||||
for (String str : paths) {
|
||||
if (str.equals(".")) {
|
||||
continue;
|
||||
} else if (str.equals("..")) {
|
||||
if (!stack.isEmpty()) {
|
||||
stack.pop();
|
||||
}
|
||||
} else {
|
||||
if (!str.equals("")) {
|
||||
stack.push(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
path = "";
|
||||
while (!stack.isEmpty()) {
|
||||
path = "/" + stack.pop() + path;
|
||||
}
|
||||
return path.equals("") ? "/" : path;
|
||||
}
|
||||
}
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
57
LeetCode/src/main/java/leetcode/editor/cn/SimplifyPath.md
Normal file
57
LeetCode/src/main/java/leetcode/editor/cn/SimplifyPath.md
Normal file
@ -0,0 +1,57 @@
|
||||
<p>给你一个字符串 <code>path</code> ,表示指向某一文件或目录的 Unix 风格 <strong>绝对路径 </strong>(以 <code>'/'</code> 开头),请你将其转化为更加简洁的规范路径。</p>
|
||||
|
||||
<p class="MachineTrans-lang-zh-CN">在 Unix 风格的文件系统中,一个点(<code>.</code>)表示当前目录本身;此外,两个点 (<code>..</code>) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,<code>'//'</code>)都被视为单个斜杠 <code>'/'</code> 。 对于此问题,任何其他格式的点(例如,<code>'...'</code>)均被视为文件/目录名称。</p>
|
||||
|
||||
<p>请注意,返回的 <strong>规范路径</strong> 必须遵循下述格式:</p>
|
||||
|
||||
<ul>
|
||||
<li>始终以斜杠 <code>'/'</code> 开头。</li>
|
||||
<li>两个目录名之间必须只有一个斜杠 <code>'/'</code> 。</li>
|
||||
<li>最后一个目录名(如果存在)<strong>不能 </strong>以 <code>'/'</code> 结尾。</li>
|
||||
<li>此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 <code>'.'</code> 或 <code>'..'</code>)。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回简化后得到的 <strong>规范路径</strong> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>path = "/home/"
|
||||
<strong>输出:</strong>"/home"
|
||||
<strong>解释:</strong>注意,最后一个目录名后面没有斜杠。 </pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>path = "/../"
|
||||
<strong>输出:</strong>"/"
|
||||
<strong>解释:</strong>从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>path = "/home//foo/"
|
||||
<strong>输出:</strong>"/home/foo"
|
||||
<strong>解释:</strong>在规范路径中,多个连续斜杠需要用一个斜杠替换。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 4:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>path = "/a/./b/../../c/"
|
||||
<strong>输出:</strong>"/c"
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= path.length <= 3000</code></li>
|
||||
<li><code>path</code> 由英文字母,数字,<code>'.'</code>,<code>'/'</code> 或 <code>'_'</code> 组成。</li>
|
||||
<li><code>path</code> 是一个有效的 Unix 风格绝对路径。</li>
|
||||
</ul>
|
||||
<div><div>Related Topics</div><div><li>栈</li><li>字符串</li></div></div>\n<div><li>👍 260</li><li>👎 0</li></div>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user