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)

更多Python編程題,等你來挑戰:Python編程題匯總(持續更新中……)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM