解題思路 leetcode第七十一題 簡化路徑

2021-10-09 14:11:57 字數 1371 閱讀 8194

題目描述:

以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。

在 unix 風格的檔案系統中,乙個點(.)表示當前目錄本身;此外,兩個點 (…) 表示將目錄切換到上一級(指向父目錄);兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱:linux / unix中的絕對路徑 vs 相對路徑

請注意,返回的規範路徑必須始終以斜槓 / 開頭,並且兩個目錄名之間必須只有乙個斜槓 /。最後乙個目錄名(如果存在)不能以 / 結尾。此外,規範路徑必須是表示絕對路徑的最短字串。

示例 1:

輸入:"/home/"

輸出:"/home"

解釋:注意,最後乙個目錄名後面沒有斜槓。

示例 2:

輸入:"/…/"

輸出:"/"

解釋:從根目錄向上一級是不可行的,因為根是你可以到達的最高端。

示例 3:

輸入:"/home//foo/"

輸出:"/home/foo"

解釋:在規範路徑中,多個連續斜槓需要用乙個斜槓替換。

示例 4:

輸入:"/a/./b/…/…/c/"

輸出:"/c"

示例 5:

輸入:"/a/…/…/b/…/c//.//"

輸出:"/c"

示例 6:

輸入:"/a//bc/d//././/…"

輸出:"/a/b/c"

解題思路:本題採用將字串解析成列表,然後去掉多餘元素,再判斷特殊元素的方法,首先將字串一『/』為分隔符解析成列表,然後去掉空元素和『.』元素,之後再判斷特殊字元『…』,若』…『不在開頭,將』…『及其前乙個元素去掉,當』…『在首部,只將』…『去掉。最後返回反斜槓與列表拼接出的字串。**如下:

class

solution

:def

simplifypath

(self, path:

str)

->

str:

s = path.split(

'/')

res =

for i in s:

if i notin[

'','.']

:while

'..'

in res:

idx = res.index(

'..'

)if idx !=0:

res = res[

:idx-1]

+ res[idx+1:

]else

: res.remove(

'..'

)return

'/'+

'/'.join(res)

提交後,通過。

解題思路 leetcode第七十七題 組合

題目描述 給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。示例 輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 解題思路 本題利用遞迴方法解題,遞迴引數包含t,res,solution。其中t代表遞迴內遍歷的起始位置,res儲存最後的結果列表,sol...

解題思路 leetcode第七十八題 子集

題目描述 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 本題與77題十分相似,只是將77的搜尋固定長度改為了不定長度,因此本題採用與77題同樣的解法,主體...

解題思路 leetcode第七十二題 編輯距離

題目描述 給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h...