题目
思路分析
这道题就是遍历字符串,看是不是由abc,ab+c,a+bc组成的。
使用一个数组来储存遍历过程中的字符串。当当前数组长度大于三的时候,检查最后的字符串是否为abc。如果是的话,就消除最后三个,如果不是,继续入数组。(有点像消消乐的感觉)
注意点
当遍历完所有的字符之后,可能数组里面刚好剩余abc,但是因为退出循环了,因此此时没法消除。所以为了解决这个问题,我们家一个哨兵‘!’,如果当前字符串合法,那么最后处理完的数组应该长度是1.
代码
class Solution {
public:
bool isValid(string s) {
vector<char> arr;
int tot = 0;
s += '!';//哨兵
for(auto c : s){
if(tot >= 3){
if(arr[tot -1] == 'c' && arr[tot - 2] == 'b' && arr[tot - 3] == 'a'){
for(int i = 0;i < 3;i++) arr.pop_back();
tot -= 3;
}
}
arr.push_back(c);
tot++;
}
return tot == 1;
}
};