题目链接:力扣
方法一:字符串直接对比前后两位
#include<iostream>
#include<cstring>
using namespace std;
class Solution {
public:
string makeGood(string s)
{
//使用for循环遍历s字符串,由于中间会有删除操作会影响下标值,因此省略步长的操作
for(int i=0;i<s.size();)
{
if(s.size()!= 0 && (abs(s[i]-s[i+1])==32)){
s.erase(i,2);
//可能存在多个值需要删除
i = 0;
}
else
i++;
//字符串长度为0,返回字符串
if(s.size() == 0)
return s;
}
return s;
}
};
int main(int argc, char *argv[]){
string str,tmp;
Solution sol;
cin >> str;
tmp = sol.makeGood(str);
cout << tmp << endl;
return 0;
}
方法二:
栈,每次比较栈顶元素和下一个元素是否大小写关系,res.back()表示最后一个元素
class Solution {
public:
string makeGood(string s){
string res;
for(char i : s){
if(!res.empty() && abs(res.back() - i) == 32)
{
res.pop_back();
continue;
}
else
{
res.push_back(i);
}
}
return res;
}
};