问题描述:
给你一个字符串,判断是否同时含有“AB”和“BA”,“A”“B”不能共用。
题目链接:CodeForces NO.550A
思路:
两组,四个标记,正着来一遍,反着来一遍。若有两组至少有一组满足条件即可。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<set>
#define INF 0x3f3f3f3f
#define MAX 100
#define PI 3.1415926
using namespace std;
int main(){
char s[MAX];
scanf("%s", s);
int len = strlen(s);
if(len <= 3){
cout << "NO" << endl;
return 0;
}
int flag = -1, flag1 = -1;
for(int i = 0; i < len; i++){
if(s[i] == 'B' && flag == -1){
if(s[i+1] == 'A'){
flag = 1;
i+=2;
}
}
if(s[i] == 'A' && flag1 == -1){
if(s[i+1] == 'B'){
flag1 = 1;
i++;//注意i的变化,非常关键!!!
}
}
}
int flag2 = -1, flag3 = -1;
for(int i = len - 1; i >= 0; i--){
if(s[i] == 'B'&&flag2 == -1){
if(s[i-1] == 'A'){
flag2 = 1;
i-=2;
}
}
if(s[i] == 'A'&& flag3 == -1){
if(s[i-1] == 'B'){
flag3 = 1;
i--;
}
}
}
if((flag + flag1 >= 2) || (flag2 + flag3 >= 2)){
cout << "YES" << endl;
}else
cout << "NO" << endl;
return 0;
}