題目描述
代碼解決
class Solution { public:string removeDuplicates(string s) {// 定義一個棧來存儲字符stack<char> st;// 遍歷字符串中的每一個字符for(int i = 0; i < s.size(); i++){// 如果棧為空或棧頂字符與當前字符不相同,則將當前字符入棧if(st.empty() || st.top() != s[i]){st.push(s[i]);}// 如果棧頂字符與當前字符相同,則彈出棧頂字符,表示刪除這兩個重復的字符else{st.pop();}}// 定義結果字符串string result = "";// 將棧中剩余的字符依次彈出,形成結果字符串while(!st.empty()){result += st.top();st.pop();}// 由于棧彈出順序是逆序的,所以需要將結果字符串反轉reverse(result.begin(), result.end());// 返回最終的結果字符串return result;} };
定義棧:
stack<char> st;
- 使用棧來存儲字符,方便檢查和刪除相鄰且重復的字符。
遍歷字符串:
for(int i = 0; i < s.size(); i++)
- 遍歷字符串的每一個字符。
處理字符:
if(st.empty() || st.top() != s[i])
- 如果棧為空或者棧頂字符與當前字符不相同,則將當前字符入棧。
else { st.pop(); }
- 如果棧頂字符與當前字符相同,則彈出棧頂字符,表示刪除這兩個重復的字符。
構建結果字符串:
string result = "";
- 定義一個結果字符串,用于存儲棧中的字符。
將棧中的字符彈出并添加到結果字符串中:
while(!st.empty()) { result += st.top(); st.pop(); }
- 將棧中剩余的字符依次彈出,形成結果字符串。
反轉結果字符串:
reverse(result.begin(), result.end());
- 由于棧的彈出順序是逆序的,所以需要將結果字符串反轉。
返回最終結果:
return result;
- 返回處理后的字符串。
代碼解決二?
class Solution { public:string removeDuplicates(string s) {// 定義一個字符串變量result,用于存儲處理后的字符string result;// 遍歷輸入字符串s中的每一個字符for(char a : s){// 如果result為空或result的最后一個字符與當前字符a不相同,則將字符a添加到result的末尾if(result.empty() || result.back() != a){result.push_back(a);}// 如果result的最后一個字符與當前字符a相同,則將result的最后一個字符刪除else{result.pop_back();}}// 返回處理后的字符串resultreturn result;} };
定義結果字符串:
string result;
- 使用一個字符串變量
result
來存儲處理后的字符。遍歷輸入字符串:
for(char a : s)
- 遍歷輸入字符串
s
中的每一個字符a
。處理字符:
if(result.empty() || result.back() != a)
- 如果
result
為空或者result
的最后一個字符與當前字符a
不相同,則將字符a
添加到result
的末尾。else { result.pop_back(); }
- 如果
result
的最后一個字符與當前字符a
相同,則將result
的最后一個字符刪除。返回最終結果:
return result;
- 返回處理后的字符串
result