[CF550A] Two Substrings

[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";
}
原文地址:https://www.cnblogs.com/mollnn/p/14429796.html