题意:给出一个文件路径,输出简化后的文件路径
如/home/ => /home
/.. => /
/. => /
思路:当遇到/时,就将字符串压入栈中,同时将字符串清空。在遇到..时,判断栈中是否为空,如果不为空,出栈,否则不操作。
但是当字符串扫描完后,记录的字符串可能不为空,并且这个字符串可能为.或者..,所以在遍历完字符串,有些细节要处理
具体代码如下:
public class Solution {
public String simplifyPath(String path) {
Stack<String> stack = new Stack<>();
String tmp = "";
for (int i = 0; i < path.length(); i++) {
if (path.charAt(i) == '/') {
if (!tmp.isEmpty()) {
if ("..".compareTo(tmp) == 0) {
if (!stack.isEmpty()) stack.pop();
} else if (".".compareTo(tmp) != 0) {
stack.add(tmp);
}
tmp = "";
}
}
else tmp = tmp + path.charAt(i);
}
if (!tmp.isEmpty()) {
if ("..".compareTo(tmp) == 0) {
if (!stack.isEmpty()) stack.pop();
}
else if (".".compareTo(tmp) == 0);
else stack.add(tmp);
}
String[] s = new String[stack.size()];
int cnt = stack.size();
while (!stack.isEmpty()) {
s[--cnt] = stack.pop();
}
String ans = "/";
for (int i = 0; i < s.length; i++) {
ans += s[i];
if (i != s.length - 1) ans += "/";
}
return ans;
}
}