思路:以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。
在 unix 風格的檔案系統中,乙個點(.)表示當前目錄本身;此外,兩個點 (…) 表示將目錄切換到上一級(指向父目錄);兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱:linux / unix中的絕對路徑 vs 相對路徑
請注意,返回的規範路徑必須始終以斜槓 / 開頭,並且兩個目錄名之間必須只有乙個斜槓 /。最後乙個目錄名(如果存在)不能以 / 結尾。此外,規範路徑必須是表示絕對路徑的最短字串。
輸入:"/home//foo/"
輸出:"/home/foo"
解釋:在規範路徑中,多個連續斜槓需要用乙個斜槓替換。
輸入:"/a//bc/d//././/.."
輸出:"/a/b/c"
這一題剛看到覺得很複雜,以為要用到正則匹配或者每個字母的判斷,實際上用乙個棧就可以解決:
1.定義乙個輔助棧;
2.先把字串以"/「為分隔符分割成陣列,此時陣列有"路徑」、""、"."、"…"這四種情況;
3.遍歷陣列,當s[i].equals("…")並且棧不空時pop,當!s[i].equals("") && !s[i].equals(".") && !s[i].equals("…"),即s[i]是路徑入棧;
4.棧空,返回"/",棧非空,用stringbuffer做乙個連線返回即可;
public string simplifypath
(string path)
if(stack.
isempty()
)return
"/";
stringbuffer res =
newstringbuffer()
;for
(int i =
0; i < stack.
size()
; i++
)return res.
tostring()
;}
力扣解題思路 打家劫舍
思路 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在...
力扣解題思路 素數
首先,如何判斷乙個數是否為素數呢,首先我們知道最小的素數是2,那麼我們從2開始判斷該數是否能找到被除數即可,完整 如下 public boolean isprimenum int i return true 思路 統計所有小於非負整數 n 的質數的數量。那麼這一題我們需要對每個小於n的數進行判斷一次...
從零開始刷力扣(九十七) 71 簡化路徑
給你乙個字串path,表示指向某一檔案或目錄的 unix 風格絕對路徑 以 開頭 請你將其轉化為更加簡潔的規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。任意多個連續的斜槓 即,都被視為單個斜槓...