[LeetCode]71. 简化路径(java实现)模拟题
1. 题目
2. 读题(需要重点注意的东西)
思路:
用res记录当前路径的位置,然后判断:
- 如果遇到“…”,则返回上一层路径
- 如果遇到“.”或者多余的斜杠,不做任何行动
- 其它情况,表示进入某个子目录,我们在 res 后面补上新路径即可
最后返回简化后得到的规范路径 。
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public String simplifyPath(String path) {
StringBuilder res = new StringBuilder("");
String name = "";
// 给path的末尾加上 "/"
if(path.charAt(path.length()-1) != '/') path += "/";
for(var c : path.toCharArray()){
// 用name记录从上一个 "/" 到下一个 "/" 中间是什么
// 如 /home/ ,name = "home"
if(c != '/') name += c;
// 如果是分隔符 "/"
else{
// 如果name此时是 ".." 返回上级目录
// 如此时res为 /home/xxx/yyy ---> 简化得 /home/xxx
if(name.equals("..")){
// 去掉yyy
while(res.length() != 0 && res.charAt(res.length()-1) != '/') res.deleteCharAt(res.length()-1);
// 去掉"/"
if(res.length() != 0) res.deleteCharAt(res.length()-1);
}
// 如果不是"." 或者 name为空
// 当存在多个连续的"/"时,name为空,直接跳过即可
// 否则让当前的文件插入结果路径res中
else if(!name.equals(".") && !name.equals("")) res.append("/").append(name);
name = "";
}
}
if(res.length() == 0) res.append("/");
return res.toString();
}
}
可能存在的问题: