leetcode 071 簡化路徑

2021-10-09 16:58:48 字數 1293 閱讀 3908

leetcode 071簡化路徑

輸入 乙個unix 風格的絕對路徑,你需要簡化它。

絕對路徑包括目錄名、斜槓、點(.)、兩個點(…),乙個點(.)表示當前目錄本身;兩個點 (…) 表示將目錄切換到上一級(指向父目錄)。

簡化後的路徑不包含點(.)和兩個點(…),且始終以斜槓 / 開頭,兩個目錄名之間必須只有乙個斜槓 /。最後乙個目錄名(如果存在)不能以 / 結尾。

我的思路是首先將所有斜槓變為空格,獲取以空格為分隔的元素,這些元素可能是目錄名、點(.)、兩個點(…),忽略點(.)的情況,把其它元素從頭開始依次壓入棧中,然後依次彈棧,當彈出為目錄名時,則壓入儲存結果的棧中,當彈出元素為兩個點(…)的時候,則繼續彈出,如果接著還彈出兩個點(…),則記錄目錄名彈出次數為彈出的兩個點(…)的個數,繼續彈出,每彈出乙個目錄名,目錄名彈出次數減1,此時彈出的目錄名不壓入儲存結果的棧中,直到目錄名彈出次數減為0。最後依此輸出儲存結果棧中的元素。

去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片.

string simplifypath

(string path)

}int count=0;

for(i=l-

1;i>=

0;i++

)else

} string left_path = path.

substr(0

,l-count)

; stringstream st

(left_path)

; string tpstr;

while

(st>>tpstr)

}while

(!op.

empty()

)else

}else}}

else

if(val!=

".")

} string rstr=

"/";

while

(!result.

empty()

) rstr = rstr.

length()

>

1?rstr.

substr(0

,rstr.

length()

-1):rstr;

return rstr;

}

1)沒有目錄名的情況,這時還是要輸出乙個』/』。

2)當彈出兩個點(…)時,棧已經空了,要判斷非空。

3)容易忘記存在連續的兩個點(…)的情況。

LeetCode071 簡化路徑

以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱 linux unix中的絕對路徑 vs 相對路徑 ...

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 ...