問題在這里:
https://binarysearch.com/problems/Unix-Path-Resolution
給定一個 Unix
path,表示為一個字串串列,回傳它的決議版本。在 Unix 中,
".."表示轉到上一個目錄,"."表示停留在當前目錄。通過決議,我們的意思是評估這兩個符號,以便獲得我們當前所在的最終目錄。約束
n ≤ 100,000n的長度在哪里path示例 1
輸入path = ["usr", "..", "usr", ".", "local", "bin", "docker"]輸出
["usr", "local", "bin", "docker"]解釋
The input represents "/usr/../usr/./local/bin" which resolves to "/usr/local/bin/docker"示例 2
輸入path = ["bin", "..", ".."]輸出
[]解釋
The input represents "/bin/../.." which resolves to "/"
我的正確解決方案:
class Solution:
def solve(self, path):
stack = []
for s in path:
if s == "..":
if len(stack)> 0:
stack.pop()
elif s == ".": #if "elif" is replaced with "if" - it gives error
continue
else:
stack.append(s)
print(stack)
return stack
在這個測驗用例上 - ["..","..","..","..","..","..","."],下面的代碼
class Solution:
def solve(self, path):
stack = []
for s in path:
if s == "..":
if len(stack)> 0:
stack.pop()
if s == ".": # "elif" is replaced with if and gives error
continue
else:
stack.append(s)
print(stack)
return stack
預期的結果是 [],但我的代碼給出了 [".."] - 錯誤的結果。
輸入不是一個字串,其中 for 回圈可能會誤認為“..”與“.” - 1 點和 2 點。
輸入是一個串列,它應該清楚地區分 btw ".." 和 "." - 所以我假設 if/elif 并不重要。
為什么簡單地將 elif 替換為“if”會給出錯誤的結果?
uj5u.com熱心網友回復:
和之間實際上是有區別if-elif-else的if-if-else。簡單來說,if-elif-else被視為“一體”,而if-if-else實際上是兩個條件塊:if和if-else。
首先我們看if-elif-else版本。如果s是"..",它永遠不會到達里面的代碼-elifor -else。明智的。
然而對于if-if-else代碼版本,正如我們所說,它實際上經歷了兩個 if-else 邏輯塊。如果s是"..",它首先通過第一個 if 陳述句。然后它繼續到下一個 if-else 塊。由于s不等于".",所以它繼續執行 else 塊中的代碼,我相信這不是你想要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466911.html
