题解 AT2020 【[ARC059B] アンバランス / Unbalanced】

· · 题解

我发现我好像跟题解写的不一样,但思路还是差不多的。

思路大致如下,与其它题解的差不多:

从字符串的开头搜索到结尾,如果该字符串与后面一个或者后面第二个是相同的,那么该字符与跟它相同的就是一个符合题目要求的子序列。

例如:IIIAM ,虽然 IIIAM 是一个符合要求的子序列,但是 II 也符合,所以直接输出 0 1就可以了。

再举一个例子:IOIII ,它本身就是一个符合要求的子序列,但是,最前面的是 IOI ,所以可以得出结论,答案不是两个长度的子序列就是三个长度的子序列。

AC 代码(改了码风):

#include<bits/stdc++.h>
using namespace std;
string s;//字符串
int main()
{
    cin>>s;//输入字符串s
    for(int i=0; i<s.length(); i++)//循环
    {
        if(s[i]==s[i+1]) //如果跟下一个相等
        {
            cout<<i+1<<" "<<i+2<<endl;//就输出i+1和i+2。
            return 0;//直接退出程序
        }
        if(s[i]==s[i+2])//如果跟第三个字符相等
        {
            cout<<i+1<<" "<<i+3<<endl;//就输出i+1和i+3。
            return 0;
        }
    }
    cout<<"-1 -1\n";//如果还没退出程序,输出-1 -1
}

程序记得加换行!