10 簡化路徑

2021-10-09 10:32:13 字數 1795 閱讀 9831

問題描述 :

以 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 相對...