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