给出一个字符串,
求是否同时存在 ”AB“ ”BA“
先遍历一次AB,然后标记掉,再遍历一遍BA就好了
预防出现 ABA AB这种情况
还要先遍历一次BA,标记掉再遍历AB
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
char tm[100005];
int vis[100005];
int main()
{
int i;
scanf("%s",tm+1);
int n=strlen(tm+1);
if (n<4)
{
printf("NO\n");
return 0;
}
int cun=0;
for (i=1;i<=n;i++)
{
if (tm[i]=='A'&&tm[i+1]=='B')
{
cun=1;
vis[i]=vis[i+1]=1;
break;
}
}
int flag=0;
for (i=1;i<=n;i++)
{
if (tm[i]=='B'&&tm[i+1]=='A')
if (!vis[i]&&!vis[i+1])
{
flag=1;
break;
}
}
if (cun&&flag)
{ printf("YES\n");
return 0;
}
cun=0;
memset(vis,0,sizeof(vis));
for (i=1;i<=n;i++)
{
if (tm[i]=='B'&&tm[i+1]=='A')
{
cun=1;
vis[i]=vis[i+1]=1;
break;
}
}
flag=0;
for (i=1;i<=n;i++)
{
if (tm[i]=='A'&&tm[i+1]=='B')
if (!vis[i]&&!vis[i+1])
{
flag=1;
break;
}
}
if (cun&&flag)
{ printf("YES\n");
return 0;
}
else
printf("NO\n");
return 0;
}