Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
当遇到"."时不动;
当遇到".."时栈顶弹出
当是其他的时候直接入栈
需要处理多个"/"相连的情况
由于这样处理后的结果是逆序的,再用个栈倒序下(此处也可用双端数据结构维护)
public class Solution {
public String simplifyPath(String path) {
int len = path.length(), i = 0;
Stack<String> stk = new Stack<>();
String tmp = "";
while (i < len) {
while (i < len && path.charAt(i) == '/') {
i ++;
}
while (i < len && path.charAt(i) != '/') {
tmp += path.charAt(i);
i ++;
}
if (tmp != "") {
if (tmp.compareTo(".") == 0) {
i ++;
tmp = "";
continue;
}
if (tmp.compareTo("..") != 0) {
stk.add(tmp);
} else if (!stk.isEmpty()){
stk.pop();
}
}
tmp = "";
}
String ans = "";
Stack<String> helpStk = new Stack<>();
while (!stk.isEmpty()) {
helpStk.add(stk.pop());
}
while (!helpStk.isEmpty()) {
ans += "/" + helpStk.pop();
}
return ans == "" ? "/" : ans;
}
}