一、題目解析
1、反復執行重復項刪除操作
2、s僅由小寫英文字母組成
二、算法原理
該題并不難,難的是能不能想到用棧這個數據結構解題
解法:棧模擬
橫著看起來不好理解,我們把它豎起來,是不是和消消樂很類似,兩兩消去,上的會往下掉;這樣的結構很難不往棧方面去想
但是我們沒有必要使用庫里的棧,第一點,棧中存儲的是字符,我們得到最終結果之前,還需要把棧內的元素還原成字符串;第二點在我們早期學習時,或許不少讀者都用c實現過鏈表、棧和隊列,這樣簡單的數據結構,簡單的棧是可以用數組模擬的,由于需要返回string,所以這里可以使用string來模擬棧的功能
當即將加入ret的元素與ret末尾元素相同,根據重復項刪除,我們ret.pop_back(),進行尾刪操作
有需要的可以自行查詢相關語法細節
鏈接:cplusplus.com - The C++ Resources Network
三、代碼示例
class Solution {
public:string removeDuplicates(string s){string ret;for(int i = 0;i<s.size();i++){if(ret.size()>0&&ret[ret.size()-1] == s[i])ret.pop_back();else ret += s[i];}return ret;}
};