您的位置:首页 > 其它

Two Substrings

2015-06-05 21:58 302 查看


Two Substrings

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

You are given string s.
Your task is to determine if the given string s contains two non-overlapping substrings
"AB" and "BA" (the substrings can go in any order).

Input
The only line of input contains a string s of
length between 1 and 105 consisting
of uppercase Latin letters.

Output
Print "YES" (without the quotes), if string s contains
two non-overlapping substrings "AB" and "BA", and "NO"
otherwise.

Sample test(s)

input
ABA


output
NO


input
BACFAB


output
YES


input
AXBYBXA


output
NO


Note
In the first sample test, despite the fact that there are substrings "AB" and
"BA", their occurrences overlap, so the answer is "NO".
In the second sample test there are the following occurrences of the substrings: BACFAB.
In the third sample test there is no substring "AB" nor substring "BA".
给一个字符串,找AB和BA,但是AB和BA不能重合,比如ABA不算。直接就是模拟,分类,先找AB,再找BA,然后还有一个先找BA,再找AB。再定义一个标兵,最后输出。
#include<cstdio>

#include<cstring>

#include<iostream>

using namespace std;

char c[100005];

int main()

{

int i, j, m, n, leap;

scanf("%s", c);

int len = strlen(c); leap = 0; int leap1 = 0;

for (i = 0; i < len - 1; i++)

{

if (c[i] == 'A'&&c[i + 1] == 'B'&&!leap)

{

leap = 1;

i++;

}

else if (leap == 1 && !leap1&&c[i] == 'B'&&c[i + 1] == 'A')

leap1 = 1;

if (leap1 == 1)break;

}

if (leap1 == 1)

cout << "YES" << endl;

else

{

leap = leap1 = 0;

for (i = 0; i < len - 1; i++)

{

if (c[i] == 'B'&&c[i + 1] == 'A'&&!leap)

{

leap = 1;

i++;

}

else if (leap == 1 && !leap1&&c[i] == 'A'&&c[i + 1] == 'B')

leap1 = 1;

if (leap1 == 1)break;

}

if (leap1 == 1)

cout << "YES" << endl;

else

cout << "NO" << endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: