循环分割判定是否为循环字符串 performance(c++):

az770 发表于 1年前 · 关联问题 周期串

#include<bits/stdc++.h> using namespace std; int main() { int n; //输入组量 cin>>n; for(int j=0;j<n;j++) { string s; //输入字符串 cin>>s; string pom[100]; //储存分割字符串的数组 int i=1,x=0,len=s.size(); if(len==1) cout<<1; //特判:只有一个字符的字符串 for( i=1;i<len;i++) //i表示一组分割字符的个数 { int m=0; //m表示有多少组 for(x=0;x*i<len;x++) //循环分割 { if(x*i+i>=len) //最后一次分割 { int k=len-x*i; pom[m]=s.substr(x*i,k); m++; break; } else { pom[m]=s.substr(x*i,i); //正常分割 m++; } } int q; //判断分割的字符串是否一致 for( q=0;q<m-1&&pom[q]==pom[q+1];q++); if(q==m-1) //判断一致时 { cout<<i; break; } else if(i==len-1) //特判无循环字符串:自身长度 { cout<<len; } } if(j<n-1) cout<<endl<<endl; //格式空行 } return 0; }