题解:

KMP中next数组的巧妙运用。在这里我们假设这个字符串的长度是len,那么如果len可以被len-next[len]整除的话,我们就可以说len-next[len]就是那个最短子串的长度为什么呢? 假设我们有一个字符串ababab,那么next[6]=4对吧,由于next的性质是,匹配失败后,下一个能继续进行匹配的位置,也就是说,把字符串的前四个字母,abab,平移2个单位,这个abab一定与原串的abab重合(否则就不满足失败函数的性质),这说明了什么呢,由于字符串进行了整体平移,而平移后又要重叠,那么必有s[1]=s[3],s[2]=s[4],s[3]=s[5],s[4]=s[6].说明长度为2的字符串在原串中一定重复出现,这就是len-next[len]的含义!(啰嗦的很,对于一个字符串,它的最短重复子串长度为len-knext[len])

ac代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#define mt(a) memset(a,0,sizeof(a))
using namespace std;
int knext[];
void getknext(char s[],int len)
{
mt(knext);
int i=;
int j=-;
knext[i]=j;
while(i<len)
{
if(j==- || s[i]==s[j])
{
i++;
j++;
knext[i]=j;
}
else j=knext[j];
}
}
char s[];
int main()
{
while(~scanf("%s",s))
{
if(s[]=='.') break;
int len=strlen(s);
getknext(s,len);
int temp=len-knext[len];
if(len%temp==) cout<<len/temp<<endl;
else cout<<<<endl;
}
return ;
}

poj 2406 求最短重复字串的更多相关文章

  1. [模拟赛FJOI Easy Round #2][T1 sign] (模拟+求字符串重复字串)

    [题目描述] 小Z在无意中发现了一个神奇的OJ,这个OJ有一个神奇的功能:每日签到,并且会通过某种玄学的算法计算出今日的运势.在多次试验之后,小Z发现自己的运势按照一定的周期循环,现在他找到了你,请通 ...

  2. hdu 4333 扩展kmp+kmp重复字串去重

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...

  3. poj2406 Power Strings (kmp 求最小循环字串)

    Power Strings   Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 ...

  4. leetcode-3 最长无重复字串

    3. Longest Substring Without Repeating Characters 题面 Given a string, find the length of the longest ...

  5. POJ - 2406 ~SPOJ - REPEATS~POJ - 3693 后缀数组求解重复字串问题

    POJ - 2406 题意: 给出一个字符串,要把它写成(x)n的形式,问n的最大值. 这题是求整个串的重复次数,不是重复最多次数的字串 这题很容易想到用KMP求最小循环节就没了,但是后缀数组也能写 ...

  6. SPOJ - Distinct Substrings,求不同的字串个数!

    DISUBSTR - Distinct Substrings 题意:给你一个长度最多1000的字符串,求不相同的字串的个数. 思路:一个长度为n的字符串最多有(n+1)*n/2个,而height数组已 ...

  7. poj 2406 求字符串中重复子串的个数

    Sample Input abcdaaaaababab.Sample Output 1 //1个abcd4 //4个a3 //3个ab #include<stdio.h> #include ...

  8. 【LeetCode每天一题】Longest Substring Without Repeating Characters(最长无重复的字串)

    Given a string, find the length of the longest substring without repeating characters. Example 1:    ...

  9. poj 2406 Power Strings(kmp求一个串的重复子串)

    题意:重复子串次数 思路:kmp #include<iostream> #include<stdio.h> #include<string.h> using nam ...

随机推荐

  1. oracle之case

    使用oracle时,不免会用到判断后转换为要展示的值,这里常用case,如下: SELECT (case ) then 'yes' ) then 'no' else 'other' end) --no ...

  2. python笔记7 logging模块 hashlib模块 异常处理 datetime模块 shutil模块 xml模块(了解)

    logging模块 日志就是记录一些信息,方便查询或者辅助开发 记录文件,显示屏幕 低配日志, 只能写入文件或者屏幕输出 屏幕输出 import logging logging.debug('调试模式 ...

  3. Ionic4.x 内置颜色

    primary/secondary/tertiary /success/warning/danger/dark/medium/light

  4. (八)利用apache组件进行文件上传下载

    一.文件上传 文件上传,即服务器端得到并处理用户上传的文件,这个文件存放在request里,也就是需要对request进行处理. 1.1 编写html文件 <!DOCTYPE html> ...

  5. MySQL函数使用

    1.mysql开启函数功能 MySQL函数不能创建的解决方法 在使用MySQL数据库时,有时会遇到mysql函数不能创建的情况. 出错信息大致类似: ERROR 1418 (HY000): This ...

  6. jQuery插件—获取URL参数

    做的项目中需要用到通过JS获取GET参数,上网找了一下,找到如下插件: 例如 当前你的URL是: http://www.xxx.com/index.php?test=1&kk=2 //如果想获 ...

  7. Python3之高阶函数filter

    Python内建的filter()函数用于过滤序列 和map()一样,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是T ...

  8. iOS笔试题01

    1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #import和#include都能完整地包 ...

  9. 01.轮播图之四 :imageViews(2 或者 3 个imageview) 轮播

    首先说下 3 个imageView的轮播,这个逻辑分析起来 比较简单, 先上传个图片吧::::: 主要分析起来,核心就是这样 :新的图片永远是加在中间ImageView上的,下一轮的第一张图片,是上一 ...

  10. 【web 安全测试Tools】BurpSuite 1.7.32及注册机【无后门版】

    BurpSuite 1.7.32 原版+注册机 下载 链接:https://pan.baidu.com/s/1LFpXn2ulTLlcYZHG5jEjyw 密码:mie3 注意无后门版文件完整性: b ...