题目链接:Check the string
题意
一个只包含有
a
,b
,c
三种字符的字符串,字符串分为三段,依次为连续的a
字符、连续的b
字符和连续的c
字符,其中c
字符的个数等于a
字符或者b
字符的个数,问给定的字符串是否满足以上条件。
输入
输入为一个字符串 S (1≤|S|≤5000) S ( 1 ≤ | S | ≤ 5000 ) ,字符串中只包含
a
,b
,c
三种字符。
输出
如果满足条件,则输出 YES Y E S ,否则输出 NO N O 。
样例
输入 |
---|
aaabccc |
输出 |
YES |
提示 |
c 字符的数量等于 a 字符的数量。 |
输入 |
---|
bbacc |
输出 |
NO |
提示 |
c 字符的数量等于 b 字符的数量,但是字符的顺序不正确。 |
输入 |
---|
aabc |
输出 |
YES |
提示 |
c 字符的数量等于 b 字符的数量。 |
题解
按题意检查格式。
过题代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <algorithm>
#include <functional>
#include <iomanip>
using namespace std;
#define LL long long
const int maxn = 5000 + 100;
int Count[3];
char str[maxn];
int main() {
#ifdef LOCAL
freopen("test.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // LOCAL
ios::sync_with_stdio(false);
while(scanf("%s", str) != EOF) {
bool flag = true;
int cnt = 0;
memset(Count, 0, sizeof(Count));
for(int i = 0; str[i]; ++i) {
int w = str[i] - 'a';
++Count[w];
if(cnt + 1 == w) {
++cnt;
} else if(cnt != w) {
flag = false;
break;
}
}
for(int i = 0; i < 3; ++i) {
if(Count[i] == 0) {
flag = false;
break;
}
}
if(!flag) {
printf("NO\n");
continue;
}
if(Count[2] == Count[0] || Count[1] == Count[2]) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}