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

· · 题解

P14245通道

思路

题目要求令f(S,d)表示将字符串S向左移动d次后的结果,一个美丽的f(S,d)需要保证首尾相同;

所以在移动第d次的时候,此时S _ d移动到了字符串末尾S _ {d+1}移动到了字符串首位,所以只需要遍历字符串S,每次比较S _ dS _ {d+1}的值是否相等即可;

相等的话直接输出此次循环的次数,最后结束循环。

code

//头文件省略

int t;
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
    cin>>t;
    for(int n=1;n<=t;n++){
        string s;
        cin>>s;
        int len=s.size();
        int m=s[len-1];
        if(s[0]==m || len==1){
            cout<<0<<endl;
            continue;
        }else{
            bool cnt=false;
            for(int i=0;i<len;i++){
                if(s[i]==s[i+1]){
                    cnt=true;
                    cout<<i+1<<endl;
                    break;
                }
            }
            if(!cnt) cout<<-1<<endl;
        }
    }
    return 0;
}