Medium
这种遇到..
要退后的,放进去,再取出来最近放进去的,就要联想到Stack。这道题的主要数据结构就是stack. 然后用一个set来存下特殊符号:..
, .
,和空string. 这样遍历的时候,遇到..
以及确定stack不空,我们就可以pop()元素出来;遇到.
和空string(空string只有末尾被split出来的情况),we do nothing. 遇到字母这些,就加到stack里面。
最后构建res string的时候,记得要加/;最后答案如果是“”, 也要加/
.
class Solution {
public String simplifyPath(String path) {
Stack<String> stack = new Stack<>();
Set<String> set = new HashSet<>(Arrays.asList(".","..",""));
String[] paths = path.split("/");
//"/a/./b/../../c/"
// a . b .. .. c
for (String str : paths){
if (str.equals("..") && !stack.isEmpty()){
stack.pop();
}
if (!set.contains(str)){
stack.push(str);
}
}
String res = "";
for (String s : stack){
res += "/" + s;
}
if (res.length() != 0){
return res;
} else {
return "/";
}
}
}