A. Two Substrings

题意:给一个字符串,求是否含有不重叠的子串"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 }
View Code

相关文章: