lanqiao oj 1628 最短循环节问题

简介: lanqiao oj 1628 最短循环节问题

用户登录

#include<iostream>
#include<algorithm>
#include<cstring>
 
using namespace std ; 
const int N = 1e6 +10 ;
char s[N] ;
int n ; 
int ne[N] ;
int main(){
  cin >> n ; 
  cin >> s + 1;
  int minn = 1e9 ; 
  for(int i = 2 , j = 0; i <= n ;i ++){
    while(j && s[i] != s[j+1]) j = ne[j] ;
    if(s[i] == s[j+1]){
      minn = min(minn, i - j - 1 ) ;
    }
    ne[i] = j ; 
  }
  
  cout << minn << endl ;
  return 0 ;
}
目录
相关文章
|
算法 测试技术 C++
C++算法:最短回文串
C++算法:最短回文串
|
5月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
26 2
|
5月前
acwing 902 最短编辑距离
acwing 902 最短编辑距离
24 1
|
5月前
lanqiao OJ 108 发现环
lanqiao OJ 108 发现环
25 1
|
5月前
|
人工智能 Java BI
lanqiao OJ 111 区间位移
lanqiao OJ 111 区间位移
26 0
|
10月前
【错题集-编程题】最长公共子序列(一)(动态规划 - LCS)
【错题集-编程题】最长公共子序列(一)(动态规划 - LCS)
|
10月前
|
测试技术
[蓝桥杯 2020 省 B1] 整除序列
[蓝桥杯 2020 省 B1] 整除序列
62 0
|
算法
poj 1961 Period(kmp最短循环节)
给定一个长度为n的字符串s,求他每个前缀的最短循环节。换句话说,对于每个i(2<=i<=n),求一个最大的整数k(如果k存在),使得s的前i个字符可以组成的前缀是某个字符串重复k次得到的。输出所有存在K的i和对应的k。
63 0
|
人工智能
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
116 0
|
人工智能 测试技术
poj 3061 快慢指针寻找最短区间
翻译过来简而言之就是 第1行 输入测试的案例个数 第 i 行 输入N和S (N代表数组长度,S代表目标和) 寻找最短区间满足区间之和大于或者等于S 第 i+1行 输入数组元素