链接:
https://codeforces.com/problemset/problem/550/A
题意
给你一个字符串,问你里面是否含有"AB"和"BA"的子串,不能用同一个A或B,例如:"ABA"就不可以。
1 <= 长度 <= 1e5
Example
input
ABA
output
NO
input
BACFAB
output
YES
input
AXBYBXA
output
NO
解析
这题直接遍历,因为不知道AB和BA那个先,所以我是两个都有,第一种情况,先AB后BA;第二种,先BA后AB,二者有一种可以就行。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s;
bool flag1 = false, flag2 = false;
bool aba = false, abb = false;
bool bab = false, baa = false;
int j = 0;
for (int i = 0; i + 1 < s.size(); i++)
{
if (s[i] == 'A' && s[i + 1] == 'B')
{
aba = true;
j = i + 2;
break;
}
}
for (; j + 1 < s.size(); j++)
{
if (s[j] == 'B' && s[j + 1] == 'A')
{
abb = true;
break;
}
}
j = 0;
for (int i = 0; i + 1 < s.size(); i++)
{
if (s[i] == 'B' && s[i + 1] == 'A')
{
bab = true;
j = i + 2;
break;
}
}
for (; j + 1 < s.size(); j++)
{
if (s[j] == 'A' && s[j + 1] == 'B')
{
baa = true;
break;
}
}
if (aba && abb) flag1 = true;
if (baa && bab) flag2 = true;
if (flag1 || flag2) cout << "YES";
else cout << "NO";
return 0;
}