题目
链接
http://oi.hdoi.cn/training/9/problem/P1601
字面描述
描述
有一个只包含'A'
与'B'
的字符串,每次可以消掉一个"AB"
或一个"BB"
,并把剩下的拼在一起,求字符串最短的长度。
输入描述
输入 t( 1≤t≤20000)组数据。
每组数据一行只包含 A ,B的字符串。
输出描述
对于每组数据输出一个数表示最短长度。
样例输入1
3
AAA
BABA
AABBBABBBB
样例输出1
3
2
0
思路
此题本人思路如下:
用一个栈去维护,如果新加的元素与栈顶元素,可以构成AB,或BB串,则将栈顶元素弹出,否则将新元素扔进栈中。
最后输出字符串的长度
最后输出字符串的长度
最后输出字符串的长度
之所以能这样操作,是因为删除当前相邻元素后,字符串能拼接在一起
代码实现
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e4+10;
int t,cnt,top;
string a;
char s[maxn];
int main(){
scanf("%d",&t);
while(t--){
top=0;
cin>>a;
int len=a.length();
for(int i=0;i<len;i++){
if(!top){
s[top++]=a[i];
continue;
}
if(a[i]=='B'&&s[top-1]=='B')top--;
else if(a[i]=='B'&&s[top-1]=='A')top--;
else s[top++]=a[i];
}
cout<<top<<endl;
}
return 0;
}