题解:P14245 [CCPC 2024 Shandong I] 左移
ouyangjinghun · · 题解
题目传送门
题目大意:
给我们
思路:
每进行一次左移
s=s.substr(1)+s[0];
但是这个函数时间复杂度是很高的,如果每次都执行这个函数,那一定会超时。所以我们不能用这种方法。
那我们就要想别的方法:我们发现,当相邻的两个字母一样时,这个字符串就是美丽字符串。那我们可以通过这个从第一个去找,找到两个相邻且一样的字符,最后输出它们的位置。如果没有,就输出
最后,上我的代码:
AC code
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
while(n--)
{
cin>>s;
bool bj=1;//标记是否是美丽字符串
if(s[0]==s[s.size()-1])//特判,判断是否本来就是美丽字符串
{
cout<<0<<endl;
continue;
}
for(int i=0;i<s.size()-1;i++)
if(s[i]==s[i+1])
{
cout<<i+1<<endl,bj=0;
break;
}
if(bj) cout<<-1<<endl//判断输出-1
}
return 0;
}