首页 > 其他分享 >kmp与最小循环节

kmp与最小循环节

时间:2023-07-25 10:12:40浏览次数:35  
标签:int s2 最小 init 循环 kmp 字符串 include

#include<iostream>
#include<string.h>
#include<vector>
using namespace std;

const int N=1e6+10,INF=0x3f3f3f3f;

char s2[N];
int d[N];//d[i]表示以i结尾的字符串中 最大公共前后缀的长度

void init()//得到模式串的d[] 下标是从0开始的
{
    int len=strlen(s2);
    int i=1,j=0;//两个s2串
    while(i<len)
    {
        if(s2[i]==s2[j])
            d[i++]=++j;
        else {
            if(j>0) j=d[j-1];
            else i++;
        }
    }
}

int main()
{
    int n;  //字符串长度

    cin>>n;

    scanf("%s",s2);//输入字符串

    init();//获得d[]数组

    cout<<n-d[n-1]<<endl;//表示长度为ns2的字符串的最小循环节

    return 0;
}

 

标签:int,s2,最小,init,循环,kmp,字符串,include
From: https://www.cnblogs.com/bwdog/p/17579040.html

相关文章

  • 《信息安全数学基础》第三章:循环群
    循环群(medium)循环群定义群\(G\)中的元素都是某个元素\(g\)的幂,则\(G\)称为循环群。\(g\)是\(G\)的一个生成元,\(g\)生成的循环群\(G\)记为\((g)\)或\(<g>\)。循环群分类无限循环群:\(\{...,g^{-2},g^{-1},g^{0},g^{1},g^{2},...\}\),其中\(g^{0}=e\)......
  • if else和for循环嵌套,break的使用
    需求:有两个集合A和BA:集合中包含对象,对象中有两个属性,k1,v1例如:A中的a1对象,k1="a1",v1="23.1"B:集合中包含对象,对象的属性中包含一个string类型的数组,每个数组设置上限长度为50,集合的size也不能超过五十,目前该集合中已有三十多个,但要排除其中六个,根据名字进行排除,例如:可用的都为固定......
  • 类之间的循环依赖,你头疼了吗?
    类之间的循环依赖指的的A依赖B,B也依赖A,这就出现循环依赖。如果是spring容器中的两个bean出现循环依赖,则在容器启动时,可能会报错,导致无法启动。 如果解决循环依赖?首先要理清各类的职责,尤其是分层职责————相同层级不要相互调用,调用下级API。下面是职责不清晰导致的循环依赖......
  • C语言分支与循环(7)--- do...while()循环
    一.do语句的语法do循环语句;while(表达式);我们可以发现do后面的循环语句一定会被执行一次,随后再去执行while()循环语句,去判断表达式,如果为真则返回do语句继续执行,若为假则不进入do语句循环,如以下代码:#include<stdio.h>intmain(void){ inti=0; do { printf("%d",i);......
  • Day08_for循环+print补充用法
    1.for循环和while循环取值: 2.for循环字典: 3.for循环字符串: 4.总结for循环和while循环的异同: 5.for循环控制循环次数:range() 6.for+break和for+else: 7.range(): 8.for+continue: 9.for循环嵌套: 10.print补充用法: ......
  • 简单理解:C语言中的分支和循环语句
    一、C语言中的循环语句while循环while(//条件语句){//语句块}执行的逻辑:在执行到while()这一行时,会根据条件语句的真和假来判断是否继续进行循环,若条件语句为真则继续循环,如果条件为假则结束循环。dowhile循环do{//语句块}while(条件语句);执行的逻辑:和while类似,但是要注......
  • 1.3 循环结构 参考代码
    P5722[深基4.例11]数列求和#include<cstdio>intmain(){intn;scanf("%d",&n);intsum=0;for(inti=1;i<=n;i++)sum+=i;printf("%d\n",sum);return0;}P5718[深基4.例2]找最小值#include<cs......
  • 最小环问题
    问题定义从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的解决思路在所有环中取最小值,按照集合的思路,首先对环进行分类-按照环上点的最大编号来对整个集合进行划分Floyd算法的最外层循环恰好对更新一条线路的节点编号做出了限制,假设此时外层循环......
  • 2-8 编写一个函数 rightrot(x, n),该函数返回将 x 循环右移(即从最右端 移出的位将从最
    ArchlinuxGCC13.1.1 202304292023-07-2319:59:05星期日 点击查看代码#include<stdio.h>#include<stdint.h>intrightrot(unsignedintx,intn){uint8_ttmp;while(n>0){tmp=(x&1)<<7;//0000000......
  • MySQL之存储过程(循环)
    MySQL之存储过程变量@@是系统变量@是用户自定义的变量系统变量系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。查看系统变量模板 SHOW[SESSION|GLOBAL]VARIABLES;--查看所有系统变量 SHOW[S......