題目:算出字符串最短循環節
注意:自己的方法多次WA,最後參考了一下,主要是循環節處的循環要注意
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
int N = 0;
char word[100];
scanf("%d", &N);
while (N--)
{
scanf("%s", word);
int len = strlen(word);
for (int i = 1; i <= len; ++i)
{
if (len % i == 0)//如果滿足要求,最後的長度%len=0,所以下一個循環節開始應該是len % i == 0 的時候
{
int flag = 1;
for (int j = i; j < len; ++j)
{
if (word[j] != word[j % i]) //非常巧妙,用j%i,可以不斷循環,一直到最後,如果都沒有改變flag的狀態
//就是需要的i
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
break;
}
}
}
if (N != 0)
printf("\n");
}
return 0;
}