1.题目描述
给定一个只包含大写英文字母的字符串s
,按照以下规则消除:
1)如果s
包含长度为2
的由相同字母组成的子串,那么这些子串会被消除,余下的子串拼成新的字符串。
例如"ABCCBCCCAA"
中"CC"
,"CC"
和"AA"
会被同时消除,余下"AB"
,"C"
和"B"
拼成新的字符串"ABBC"
。
2)重复上述操作,直到新的字符串不包含相邻的相同字符为止。
例如”ABCCBCCCAA”
经过一轮消除得到"ABBC"
,再经过一轮消除得到"AC"
- 输入描述:
第一行输入一个正整数T(1<=T
<=50),表示有T组测试数据.
对于每组测试数据输入只有一行,由大写字母组成的字符串s
,长度不超过100
. - 输出描述:
对于每组测试数据,若最后可以把整个字符串全部消除,就输出Yes
,否则输出No
. - 输入样例:
2 ABCCBA ABCCCCCBBBBB
- 输出样例:
Yes No
2.题目解析
简单字符串遍历
3.参考答案
#include <bits/stdc++.h>
using namespace std;
void solve(string s){
while(true){
string res;
for(int i=0;i<s.size();++i){
if(s[i] != s[i+1]){
res.append(1,s[i]);
}else{
++i;// 过掉当前和下一个。
}
}
if(res == s) break;// 表示相邻字符没有重复
else s = res;
}
if(s.empty())
printf("Yes\n");
else
printf("No\n");
}
int main() {
int t = 0;
scanf("%d", &t);
string strs[t];
for(int i=0;i!=t;++i){
cin >> strs[i];
}
for(int i=0;i!=t;++i){
solve(strs[i]);
}
}