leetcode1047. 删除字符串中的所有相邻重复项(栈的日常应用)
生活随笔
收集整理的這篇文章主要介紹了
leetcode1047. 删除字符串中的所有相邻重复项(栈的日常应用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給出由小寫字母組成的字符串?S,重復項刪除操作會選擇兩個相鄰且相同的字母,并刪除它們。
在 S 上反復執行重復項刪除操作,直到無法繼續刪除。
在完成所有重復項刪除操作后返回最終的字符串。答案保證唯一。
?
示例:
輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中,我們可以刪除 "bb" 由于兩字母相鄰且相同,這是此時唯一可以執行刪除操作的重復項。之后我們得到字符串 "aaca",其中又只有 "aa" 可以執行重復項刪除操作,所以最后的字符串為 "ca"。
?
提示:
1 <= S.length <= 20000
S 僅由小寫英文字母組成。
?
思路:
充分理解題意后,我們可以發現,當字符串中同時有多組相鄰重復項時,我們無論是先刪除哪一個,都不會影響最終的結果。因此我們可以從左向右順次處理該字符串。
而消除一對相鄰重復項可能會導致新的相鄰重復項出現,如從字符串 abba 中刪除bb 會導致出現新的相鄰重復項 aa 出現。因此我們需要保存當前還未被刪除的字符。一種顯而易見的數據結構:棧。
我們只需要遍歷該字符串,如果當前字符和棧頂字符相同,我們就將其消去,否則就將其入棧即可。
class Solution {public String removeDuplicates(String S) {StringBuffer stack = new StringBuffer();int top = -1;for (int i = 0; i < S.length(); ++i) {char ch = S.charAt(i);if (top >= 0 && stack.charAt(top) == ch) {stack.deleteCharAt(top);--top;} else {stack.append(ch);++top;}}return stack.toString();} }?
總結
以上是生活随笔為你收集整理的leetcode1047. 删除字符串中的所有相邻重复项(栈的日常应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 民生爱中国赞中国信用卡年费多少?免年费很
- 下一篇: 创业板新三板科创板的区别 新三板创业板科