首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

LeetCode Simplify Path:Unix 路徑規範化

     編輯:C++ 入門

LeetCode Simplify Path:Unix 路徑規範化

給定 Unix 風格絕對路徑,簡化為規範路徑。規則:. 當前目錄,.. 父目錄,多重 / 視為單個,結果必以 / 開頭且無尾部 /(根目錄除外)。

棧模擬算法

  1. 按 / 分割路徑字符串。
  2. 遍歷各段:
    • "" 或 ".":忽略。
    • "..":棧非空則彈出(返回上級)。
    • 普通目錄名:入棧。
  3. 棧中元素用 / 連接,前加 / 輸出;棧空則返回 "/"。

Java 實現

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),棧存儲路徑段。

常見陷阱

  • 分割產生空字符串需過濾(連續 / 或首尾 /)。
  • .. 在根目錄下無效果,不能彈出空棧。
  • 結果為空時必須返回 "/"。

此題是棧應用的經典場景,也體現了字符串分割與路徑語義處理的結合,代碼簡潔且邏輯清晰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved