一、題目
給出由小寫字母組成的字符串 S
,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。
在 S 上反覆執行重複項刪除操作,直到無法繼續刪除。
在完成所有重複項刪除操作後返回最終的字符串。答案保證唯一。
示例:
輸入:"abbaca" 輸出:"ca" 解釋: 例如,在 "abbaca" 中,我們可以刪除 "bb" 由於兩字母相鄰且相同,這是此時唯一可以執行刪除操作的重複項。之後我們得到字符串 "aaca",其中又只有 "aa" 可以執行重複項刪除操作,所以最後的字符串爲 "ca"。
提示:
1 <= S.length <= 20000
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;
}
};