<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【一天一道Leetcode】刪除字符串相鄰重復(fù)項(xiàng)

          共 1996字,需瀏覽 4分鐘

           ·

          2021-03-14 18:35


          本篇推文共計(jì)2000個(gè)字,閱讀時(shí)間約3分鐘。



          01


          題目描述


          題目描述:


          給出由小寫字母組成的字符串 S,重復(fù)項(xiàng)刪除操作會(huì)選擇兩個(gè)相鄰且相同的字母,并刪除它們。

           

          在S上反復(fù)執(zhí)行重復(fù)項(xiàng)刪除操作,

          直到無(wú)法繼續(xù)刪除。

           

          在完成所有重復(fù)項(xiàng)刪除操作后返回最終的字符串。

          答案保證唯一。


          示例:

          輸入:"abbaca"
          輸出:"ca"

          解釋:
          "abbaca" 中,
          我們可以刪除 "bb" 由于兩字母相鄰且相同,
          這是此時(shí)唯一可以執(zhí)行刪除操作的重復(fù)項(xiàng)。
          之后我們得到字符串 "aaca"
          其中又只有 "aa" 可以執(zhí)行重復(fù)項(xiàng)刪除操作,
          所以最后的字符串為 "ca"。


          提示:

          1. 1 <= S.length <= 20000

          2. S僅由小寫英文字母組成。




          02


          方法和思路


          由題目可知,

          本題需要注意的要點(diǎn)有兩個(gè)


          1.兩個(gè)相鄰且相同字符會(huì)被刪除。

          (注意:是需要?jiǎng)h除兩個(gè)相同的字符)


          2.刪除字符串中兩個(gè)相鄰并且相同的字符可能會(huì)產(chǎn)生新的相鄰并且相同的字符。

          比如題目中的"abbaca"。刪除bb后,會(huì)產(chǎn)生新的字符串a(chǎn)aca,
          此時(shí)也需要將aa刪除
          最后的字符串為ca


          我們根據(jù)要點(diǎn)可知,并不能一次字符串刪除操作就達(dá)到最終目的,我們需要每次刪除完一對(duì)相鄰相同的字符后,再看新的字符串是否存在相鄰相同的一對(duì)字符。





          根據(jù)分析我們可以用一個(gè)數(shù)據(jù)結(jié)構(gòu),也就是棧,存儲(chǔ)每次比較的結(jié)果。


          同時(shí)可以從左到右的遍歷一次字符串S的所有字符Si,和棧中的棧頂元素比較。

           

          如果Si與棧頂元素相同,

          則說(shuō)明兩個(gè)字符相鄰且相同,或者是由于中間元素被刪除后導(dǎo)致的間接相鄰相同。


          如果Si與棧頂元素不相同,

          則說(shuō)明兩個(gè)字符無(wú)法被消除,滿足題目條件,則把此時(shí)的字符Si入棧。





          我們用字符串a(chǎn)bbaca,和一個(gè)初始為空的棧描述一下代碼處理過(guò)程。


          初始情況,棧內(nèi)為空,

          字符串S指向第一個(gè)字符S0=a



          由于棧為空,將S0=a入棧


          字符串指針指向S1=b


          此時(shí)對(duì)S1=b與棧頂元素a作出判斷,

          二者不相同,S1=b入棧



          字符串指針指向S2=b


          此時(shí)對(duì)S2=b,與棧頂元素b作出判斷,

          二者相同,S2=b與棧頂元素b消除


          字符串指針指向S3=a



          此時(shí)對(duì)S3=a與棧頂元素a作出判斷,二者相同,S3=a與棧頂元素a消除


          字符串指針指向S4=c



          由于棧為空,將S4=c入棧



          字符串指針指向S5=a



          此時(shí)對(duì)S5=a與棧頂元素c作出判斷,

          二者不相同,S5=a入棧



          字符串判斷完畢
          輸出
          棧中元素





          我們用代碼表示如下:

          class Solution:
              def removeDuplicates(self, S: str) -> str:
                  stk = list()
                  for ch in S:
                      if stk and stk[-1] == ch:
                          stk.pop()
                      else:
                          stk.append(ch)
                  return "".join(stk)




          往期回顧

          【年終總結(jié)】你好2021,再見(jiàn)2020。


          【快速寫好畢業(yè)論文】你不得不知曉的七個(gè)常用文獻(xiàn)搜索平臺(tái)


          【秋招紀(jì)實(shí)錄】一篇特別正經(jīng)的【騰訊】求職經(jīng)驗(yàn)分享


          【一天一道Leetcode】回文字符串-最少分割次數(shù)


          【一天一道Leetcode】用棧實(shí)現(xiàn)隊(duì)列


          【一天一道Leetcode】套信封問(wèn)題



          ☆ END ☆

          你與世界

          只差一個(gè)

          公眾號(hào)

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亲子乱婬-一级A片 | 97人妻人人揉人人躁人人爽 | 久久亚洲熟女 | 中文人妻无码一区二区三 | 欧美视频一区二区三区四区 |