周期串

简介: #include #include int main(){ char word[100];int ok=0; scanf("%s",word); int l=strlen(word); for (int i=1; i

#include <stdio.h>
#include <string.h>
int main()
{
 char word[100];int ok=0;
 scanf("%s",word);
 int l=strlen(word);
 for (int i=1; i<=l; ++i)//周期必是1到l,若为1,即是常数串
 {
  if (l%i==0)//最小周期必是长度的约数
  {
   int ok=1;
   for (int j=i; j<l; ++j)
   {
    if (word[j%i]!=word[j])//个人认为j-
//word[j]为第二周期的第一个字符,word[j%i]是前一个周期的第一个字符(因为
//j=i;j%i=0;j每加1,j%i也加1,直到最后一组word[j]都等于word[j%i],则i为周期
     {
      ok=0;
      break;
     }
   }
   if (ok)
   {
    printf("%d\n",i);
    break;// this is the least cycle
   }
  }
  else
   continue;
 }
 return 0;
}

 

上述代码,无MMP时输出了长度

 

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
int main()
{
char word[100];
scanf("%s",word);
int l=strlen(word);
for (int i=1; i<=l; ++i)//周期必是1到l,若为1,即是常数串
//加上等号时,最小正周期为长度
{
if (l%i==0)//最小周期必是长度的约数
{
int ok=1;
for (int j=i; j<l; ++j)
{
if (word[j%i]!=word[j])//个人认为j-1亦可
//word[j]为第二周期的第一个字符,word[j%i]是前一个周期的第一个字符(因为
//j=i;j%i=0;j每加1,j%i也加1,直到最后一组word[j]都等于word[j%i],则i为周期
{
ok=0;
break;
}
}
if (ok&&i!=l)
{
printf("%d\n",i);
break;// this is the least cycle
}
else if(i==l)
printf("No MMP\n");
}
}
system("pause");
return 0;
}

目录
相关文章
|
5月前
|
算法 前端开发
根据模式串构造最小数字
根据模式串构造最小数字
47 0
|
2月前
|
C++
串应用- 计算一个串的最长的真前后缀
这篇文章提供了一个C++程序,用于找出给定字符串的最长真前后缀,并展示了如何通过计算每个子串的最长相同前后缀来实现这一功能。
|
5月前
|
算法
KPM算法求字符串的最小周期证明
公式 `ans = n - LPS[n-1]` 描述了最小周期,其中 `n` 是子串长度,`LPS[n-1]` 是前缀函数值。证明分为特殊情况和一般情况:对于完整周期字符串,`LPS[n-1] = 3*T`,故 `ans = T`;对于非完整周期,通过分析不同长度的 `[末部分]` 和 `[前部分]`,展示 `ans` 始终等于周期 `T` 或由 `[e][b]` 构成的最小周期,从而证明公式正确。
|
5月前
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
|
5月前
|
算法 测试技术
【动态规划】【字符串】【行程码】1531. 压缩字符串
【动态规划】【字符串】【行程码】1531. 压缩字符串
力扣1849 哪种连续子字符串更长
力扣1849 哪种连续子字符串更长
|
5月前
|
存储 机器学习/深度学习 C语言
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
53 0
LeetCode 1869. 哪种连续子字符串更长
给你一个二进制字符串 s 。如果字符串中由 1 组成的 最长 连续子字符串 严格长于 由 0 组成的 最长 连续子字符串,返回 true ;否则,返回 false 。
69 0
|
人工智能
最长连续不重复子串
最长连续不重复子串
127 0
最长连续不重复子串
|
存储 数据库
长整数在插入较短的列时会被转换,但不会被截断为什么?公式是什么?
长整数在插入较短的列时会被转换,但不会被截断为什么?公式是什么?