LeetCode #1047 Remove All Adjacent Duplicates In String 刪除字符串中的所有相鄰重復(fù)項(xiàng)

1047 Remove All Adjacent Duplicates In String 刪除字符串中的所有相鄰重復(fù)項(xiàng)

Description:
Given a string S of lowercase letters, a duplicate removal consists of choosing two adjacent and equal letters, and removing them.

We repeatedly make duplicate removals on S until we no longer can.

Return the final string after all such duplicate removals have been made. It is guaranteed the answer is unique.

Example:

Example 1:

Input: "abbaca"
Output: "ca"
Explanation:
For example, in "abbaca" we could remove "bb" since the letters are adjacent and equal, and this is the only possible move. The result of this move is that the string is "aaca", of which only "aa" is possible, so the final string is "ca".

Note:

1 <= S.length <= 20000
S consists only of English lowercase letters.

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

在 S 上反復(fù)執(zhí)行重復(fù)項(xiàng)刪除操作,直到無法繼續(xù)刪除。

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

示例 :

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

提示:

1 <= S.length <= 20000
S 僅由小寫英文字母組成。

思路:

參考LeetCode #20 Valid Parentheses 有效的括號(hào)
將字符壓入棧, 再比較, 相同的丟棄
時(shí)間復(fù)雜度O(n), 空間復(fù)雜度O(1)

代碼:
C++:

class Solution 
{
public:
    string removeDuplicates(string S) 
    {
        int top = 0;
        for (auto c : S)
        {
            if (!top or S[top - 1] != c) S[top++] = c;
            else top--;
        }
        S.resize(top);
        return S;
    }
};

Java:

class Solution {
    public String removeDuplicates(String S) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < S.length(); ++i) {
            if (result.length() == 0) result.append(S.charAt(i));
            else if (result.charAt(result.length() - 1) == S.charAt(i)) result.setLength(result.length() - 1);
            else result.append(S.charAt(i));
        }
        return  result.toString();
    }
}

Python:

class Solution:
    def removeDuplicates(self, S: str) -> str:
        s = []
        for c in S:
            if s and s[-1] == c:
                s.pop()
            else:
                s.append(c)
        return ''.join(s)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容