問題描述 :
以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。
在 unix 風格的檔案系統中,乙個點(.)表示當前目錄本身;此外,兩個點 (…) 表示將目錄切換到上一級(指向父目錄);兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱:linux / unix中的絕對路徑 vs 相對路徑
請注意,返回的規範路徑必須始終以斜槓 / 開頭,並且兩個目錄名之間必須只有乙個斜槓 /。最後乙個目錄名(如果存在)不能以 / 結尾。此外,規範路徑必須是表示絕對路徑的最短字串。
示例 1:
輸入:"/home/"
輸出:"/home"
解釋:注意,最後乙個目錄名後面沒有斜槓。
示例 3:
輸入:"/home//foo/"
輸出:"/home/foo"
解釋:在規範路徑中,多個連續斜槓需要用乙個斜槓替換。
示例 4:
輸入:"/a/./b/…/…/c/"
輸出:"/c"
示例 5:
輸入:"/a/…/…/b/…/c//.//"
輸出:"/c"
示例 6:
輸入:"/a//bc/d//././/…"
輸出:"/a/b/c"
輸入說明 :
輸入一行,表示乙個unix風格的檔案絕對路徑
輸出說明 :
輸出一行,表示規範路徑
輸入範例 :
/a/./b/…/…/c/
輸出範例 :
/c
思路:用棧處理,從字串第乙個字元開始遍歷,遇到/時判斷當前的dir是不是.
.,如果是且棧不空,則棧頂元素出棧
如果不是.
.且不是.且dir不為空,則將dir加入到棧中,並且dir重新為""
遇到的不是/, 則將其拼接在dir之後
當整個字串遍歷完後執行出棧操作,出棧時進行拼接
注意:每個字串在處理之前在尾部加上/
例如path =
"/hello//foo"
按照上述過程:path =
"/hello//foo/"
第一次遇到/,次時dir為空,棧為空,什麼也沒有做
然後一直到遇到第二個/時,dir已經拼接為hello,此時將dir壓入棧中
遇到第三個dir時,什麼也沒做
在遇到最後乙個foo前,dir拼接為foo,遇到最後乙個/時,foo入棧
出棧操作
res記錄最終結果,res初始為"",迴圈出棧,直到棧空
每一次出棧,res =
"/"+ stack.
top(
)+ res
如果最後所得res是空,res =
"/"#include
#include
#include
#include
using
namespace std;
class
solution
else
if(dir !=
".."
&& dir !=
"."&&
!dir.
empty()
) dir ="";
//重新開始記錄子路徑
}else
} string res ="";
while
(!stk.
empty()
)if(res.
empty()
)return res;}}
;int
main()
leetcode 簡化路徑
問題描述 a b c簡化後為 c a b.簡化後為 c 問題解析 將字串轉換為istringstream流,進行字串分割,是 並且進入一層目錄,則進行回退 pop back 如果是目錄,則儲存目錄 如果是 並且沒有目錄級可回退,則在根目錄下 若為 或者為空 兩個 則跳過 使用getline對字串進行...
leetcode 簡化路徑
給定乙個文件 unix style 的完全路徑,請進行路徑簡化。例如,path home home path a b c c 邊界情況 你是否考慮了 路徑 的情況?在這種情況下,你需返回 此外,路徑中也可能包含多個斜槓 如 home foo 在這種情況下,你可忽略多餘的斜槓,返回 home foo ...
71 簡化路徑
題目 以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱 linux unix中的絕對路徑 vs 相對...