2696. 删除子串后的字符串最小长度
思路:就简单的模拟。方法一,用string自带的find()和erase()函数
class Solution {
public:
int minLength(string s) {
while(1){
auto tmp1=s.find("AB");
auto tmp2=s.find("CD");
if(tmp1 == -1&&tmp2 == -1) break;
if(tmp1!=-1) s.erase(s.begin()+tmp1,s.begin()+tmp1+2);
tmp2=s.find("CD");
if(tmp2!=-1) s.erase(s.begin()+tmp2,s.begin()+tmp2+2);
}
return s.size();
}
};
思路:方法二,用栈来保存已经遍历过的字符,同时进行判断。
class Solution {
public:
int minLength(string s) {
stack<char> st;
for(int i=0;i<s.size();i++){
if(s[i]=='B'&&st.size()&&st.top()=='A') st.pop();
else if(s[i]=='D'&&st.size()&&st.top()=='C') st.pop();
else st.push(s[i]);
}
return st.size();
}
};