[CF550A] Two Substrings
Description
给你一个字符串S(1-10000),判断S中是否有BA,和AB这两个字串。要求二者不重叠。是输出“YES” 不是输出“NO”。
Solution
转化为长度为 n-1 的序列,AB 变成 1,BA 变成 2
现在问题就是找两个距离不小于 2 的 1 和 2
找出 1,2 的最小,最大位置比较即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
string str;
signed main()
{
ios::sync_with_stdio(false);
cin >> str;
int abmin = 1e9, abmax = -1, bamin = 1e9, bamax = -1;
for (int i = 1; i < str.length(); i++)
{
if (str[i - 1] == 'A' && str[i] == 'B')
abmin = min(abmin, i), abmax = max(abmax, i);
if (str[i - 1] == 'B' && str[i] == 'A')
bamin = min(bamin, i), bamax = max(bamax, i);
}
if (abmax - bamin > 1 || bamax - abmin > 1)
cout << "YES";
else
cout << "NO";
}