給定 Unix 風格絕對路徑,簡化為規範路徑。規則:. 當前目錄,.. 父目錄,多重 / 視為單個,結果必以 / 開頭且無尾部 /(根目錄除外)。
/ 分割路徑字符串。"" 或 ".":忽略。"..":棧非空則彈出(返回上級)。/ 連接,前加 / 輸出;棧空則返回 "/"。public class Solution {
public String simplifyPath(String path) {
String[] strs = path.split("/");
Stack<String> s = new Stack<>();
for (String seg : strs) {
if (seg.equals(".") || seg.isEmpty()) continue;
else if (seg.equals("..")) {
if (!s.isEmpty()) s.pop();
} else {
s.push(seg);
}
}
StringBuilder sb = new StringBuilder();
for (String dir : s) {
sb.append("/").append(dir);
}
String res = sb.toString();
return res.isEmpty() ? "/" : res;
}
}
| 輸入 | 處理過程 | 輸出 |
|---|---|---|
/home/ | ["", "home", ""] → push "home" | /home |
/a/./b/../../c/ | push a, ., push b, .. → pop b, .. → pop a, push c | /c |
/../ | .. 但棧空,忽略 | / |
/home//foo/ | 多重 / 分割出空串,忽略 | /home/foo |
O(N),N 為路徑長度。O(N),棧存儲路徑段。/ 或首尾 /)。.. 在根目錄下無效果,不能彈出空棧。"/"。此題是棧應用的經典場景,也體現了字符串分割與路徑語義處理的結合,代碼簡潔且邏輯清晰。