题解:P14245 [CCPC 2024 Shandong I] 左移

· · 题解

题目传送门

1 具体做法

1.1 本身美丽

判断该字符串是否美丽,是就输出 0

1.2 本身不美丽

1.2.2 朴素做法

维护两个指针,分别表示开头和结尾,只要两个对应的字符相同就输出移动的步数即可。

1.2.2 一个小优化

一层循环,枚举开头。因为本身美丽已经被我们特判了,所以结尾就在开头前面一个字符。

1.3 无解

本身不美丽且并没有枚举出答案就输出-1

2 代码

2.1 本身美丽

比较简单,一个判断即可。

if(s[0]==s[s.size()-1])cout<<"0\n";

2.2 本身不美丽

一层循环即可。注意找到答案后要跳出循环。

for(i=1;i<s.size();i++)
{
    if(s[i]==s[i-1])
    {
        cout<<i<<"\n";
        break;
    }
}

2.3 无解

对指针进行判断即可。

if(i==s.size())cout<<"-1\n";

2.4 ACcode

#include<bits/stdc++.h>
using namespace std;
int n,i;
string s;
int main()
{
    cin>>n;
    while(--n)
    {
        cin>>s;
        if(s[0]==s[s.size()-1])cout<<"0\n";
        else
        {
            for(i=1;i<s.size();i++)
            {
                if(s[i]==s[i-1])
                {
                    cout<<i<<"\n";
                    break;
                }
            }
            if(i==s.size())cout<<"-1\n";
        }
    }
    return 0;
}

已做防伪处理,请勿复制!!!