题目描述
代码解决
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