题意:给一个字符串,求是否含有不重叠的子串"AB"和"BA",长度1e5。
题解:看起来很简单,但是一直错,各种考虑不周全,最后只能很蠢的暴力,把所有的AB和BA的位置求出来,能有一对AB和BA不重叠即可。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 char a[100005]; 5 vector<int> ab; 6 vector<int> ba; 7 int main() 8 { 9 while (~scanf("%s", a)) { 10 int len = strlen(a); 11 ab.clear(); 12 ba.clear(); 13 14 for (int i = 0; i < len - 1; ++i) { 15 if (a[i] == 'A' && a[i + 1] == 'B') { 16 ab.push_back(i); 17 } 18 if (a[i] == 'B' && a[i + 1] == 'A') { 19 ba.push_back(i); 20 } 21 } 22 23 if (ab.size() == 0 || ba.size() == 0) { 24 puts("NO"); 25 } else if (ab.size() > 2 && ba.size() > 2) { 26 puts("YES"); 27 } else { 28 int flag = false; 29 for (int i = 0; i < ab.size(); ++i) { 30 for (int j = 0; j < ba.size(); ++j) { 31 if (!(ab[i] + 1 == ba[j]) && !(ab[i] - 1 == ba[j])) flag = true; 32 } 33 } 34 if (flag) puts("YES"); 35 else puts("NO"); 36 } 37 } 38 return 0; 39 }