【題目描述】
Given an absolute path for a file (Unix-style), simplify it.
給定一個文檔(Unix-style)的完全路徑,請進行路徑簡化。
【題目鏈接】
www.lintcode.com/en/problem/simplify-path/
【題目解析】
這是一道簡化路徑的題,路徑簡化的依據(jù)是:
當(dāng)遇到“/../"則需要返回上級目錄,需檢查上級目錄是否為空。
當(dāng)遇到"/./"則表示是本級目錄,無需做任何特殊操作。?
當(dāng)遇到"http://"則表示是本級目錄,無需做任何操作。
當(dāng)遇到其他字符則表示是文件夾名,無需簡化。
當(dāng)字符串是空或者遇到”/../”,則需要返回一個"/"。
當(dāng)遇見"/a//b",則需要簡化為"/a/b"。
根據(jù)這些要求,需要兩個棧來解決問題。
先將字符串依"/"分割出來,然后檢查每個分割出來的字符串。
當(dāng)字符串為空或者為".",不做任何操作。
當(dāng)字符串不為"..",則將字符串入棧。
當(dāng)字符串為"..", 則彈棧(返回上級目錄)。
當(dāng)對所有分割成的字符串都處理完后,檢查第一個棧是否為空,如果棧為空,則證明沒有可以重建的目錄名,返回"/"即可。
當(dāng)?shù)谝粋€棧不為空時,這時候我們需要還原path。但是不能彈出棧,因為按照要求棧底元素應(yīng)該為最先還原的目錄path。
例如:原始path是 /a/b/c/,棧里的順序是:a b c,如果依次彈棧還原的話是:/c/b/a(錯誤?。_答案為:/a/b/c
所以這里可以用第二個棧,先將第一個棧元素彈出入棧到第二個棧,然后再利用第二個棧還原回初始path。
【參考答案】