题目描述
代码解决
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(); } } // 返回处理后的字符串result return 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