Python編程題35--刪除字符串中的所有相鄰重複項

題目

給定僅由小寫字母組成的非空字符串,存在一個重複項刪除操作,其會選擇兩個相鄰且相同的字母,並刪除它們。

請在字符串上反覆執行重複項刪除操作,直到無法繼續刪除,並在完成所有重複項刪除操作後返回最終的新字符串。

例如:

給定一個字符串:aaabbaaaca,返回結果:ca

給定一個字符串:a,返回結果:a

實現思路1

  • 使用 雙指針 來實現
  • 設置兩個指針:slow、fast,初始值均爲 0 ,同時用列表res存放字符串中所有字符
  • 當 fast 小於字符串的長度時,執行循環,每次循環都把res中 fast 對應的字符放到 slow 指針下,並讓 fast + 1
  • 每次循環中,判斷 slow 對應字符是否等於前一個字符。如果等於那麼讓 slow - 1,以便下次循環時重新設置res中 slow 前一個位置對應的字符,否則就讓 slow + 1
  • 當 fast 等於字符串的長度時,退出循環,此時 res 中從索引 0 到 slow 對應的所有字符,就是最終相鄰不重複的字符,將其拼接爲一個新字符串返回即可

代碼實現1

def removeDuplicates(s):
    res = list(s)
    slow, fast = 0, 0
    while fast < len(s):
        res[slow] = res[fast]
        if slow > 0 and res[slow] == res[slow - 1]:
            slow -= 1
        else:
            slow += 1
        fast += 1
    return "".join(res[0:slow])

實現思路2

  • 使用 來實現
  • 設置一個棧,用一個列表res來模擬
  • 遍歷字符串,如果res爲空,則直接把當前字符添加到res;如果res非空且最後一個字符,恰等於當前字符,也就說明出現重複項需刪除,於是對 res 執行出棧操作
  • 遍歷結束後,res中存放的就是最終相鄰不重複的字符,將其拼接爲一個新字符串返回即可

代碼實現2

def removeDuplicates(s):
    res = []
    for i in s:
        if res and res[-1] == i:
            res.pop()
        else:
            res.append(i)
    return "".join(res)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章