Lintcode421 Simplify Path solution 題解

【題目描述】

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。

【參考答案】

www.jiuzhang.com/solutions/simplify-path/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容