Leetcode——1047.刪除字符串中的所有相鄰重複項——題解+代碼實現(使用string中的刪除操作:erase)

一、題目


給出由小寫字母組成的字符串 S重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。

在 S 上反覆執行重複項刪除操作,直到無法繼續刪除。

在完成所有重複項刪除操作後返回最終的字符串。答案保證唯一。

 

示例:

輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中,我們可以刪除 "bb" 由於兩字母相鄰且相同,這是此時唯一可以執行刪除操作的重複項。之後我們得到字符串 "aaca",其中又只有 "aa" 可以執行重複項刪除操作,所以最後的字符串爲 "ca"。

 

提示:

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

二、題解思路


  • 題解思路:遍歷字符串,如果遇到相鄰字符串相等,則刪除這兩個字符串,然後原本索引i退後一位(如果是0位,則不需要退位),索引j變成其下一位,如果相鄰的字符不等,則索引i到j的位置,j索引指向下一個。其中刪除兩個相鄰元素使用string中的erase進行操作。

三、代碼實現


  • C++代碼實現
class Solution {
public:
    string removeDuplicates(string S) 
    {
        int i = 0;  //相鄰兩個的第一個索引位
        for(int j = 1;j<S.size();)    //相鄰兩個的第二個索引位
        {
            if(S[i] == S[j])    //相鄰元素相等  
            {
                S.erase(i,2);    //刪除相鄰的兩個元素
                if(i != 0)       //如果i不是S中的第0位,則需要退回一位
                    i = i-1;
                j = i+1;         //j爲i的下一位
            }
            else               //相鄰元素不等
            {
                i = j;          //i指向j的位置
                j++;            //j指向下一位
            }     
        }
        return S;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章