刘雅琼论文 http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html

论文讲的非常详细。

给定母串S,子串T,n=strlen(S),m=stlrne(T);extand[i]=S[i...n]与T的最长公共前缀长度,要在线性时间求出所有extand[].

下面是代码

#define maxn 10010
int extand[maxn],next[maxn];
void getnext(char *t)
{
int i,j,len=strlen(t),k;
next[]=len;
i=;
while(i<len-)
{
if(t[i]==t[i+])
i++;
else break;
}
next[]=i;
int a=;//a表示之前匹配过程中到达最远位置的i的值
for(k=;k<len;k++)
{
int p=next[a]+a-;//p表示之前匹配到达最远的位置
int l=next[k-a];
if(k-+l>=p)//第二种情况 长度超过p
{
       int j=p-k+1>0?p-k+1:0;
      while(k+j<len&&t[k+j]==t[j])//枚举(p+1,length) 与(p-k+1,length) 区间比较
j++;
next[k]=j;
a=k;
}
else //第二种情况
next[k]=l;
}
}
void getextand(char *s,char *t)
{
memset(next,,sizeof(next));
getnext(t);
int slen=strlen(s),tlen=strlen(t),a=;
int minlen=slen<tlen?slen:tlen; while(a<minlen&&s[a]==t[a])a++;//第一个值
extand[]=a;
a=; for(k=;k<slen;k++)
{
int p=a+extand[a]-;
int l=extand[k-a];
if(k-+l>=p)
{
int j=p-k+1>0?p-k+1:0;        while(k+j<slen&&j<tlen&&s[k+j]==t[j])
j++;
extand[k]=j;
a=k;
}
else
extand[k]=l;
}
}

扩展kmp求回文子串

http://blog.csdn.net/u013480600/article/details/23041391

扩展KMP的更多相关文章

  1. 扩展KMP算法

    一 问题定义 给定母串S和子串T,定义n为母串S的长度,m为子串T的长度,suffix[i]为第i个字符开始的母串S的后缀子串,extend[i]为suffix[i]与字串T的最长公共前缀长度.求出所 ...

  2. 扩展KMP --- HDU 3613 Best Reward

    Best Reward Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...

  3. KMP和扩展KMP

    文章网上太多这里提一下代码细节: KMP: scanf("%s\n",s); scanf("%s\n",t); int ls=strlen(s),lt=strl ...

  4. UVA5876 Writings on the Wall 扩展KMP

    扩展KMP的简单题. #include<stdio.h> #include<string.h> #define maxn 51010 char s[maxn],t[maxn]; ...

  5. hdu4333 扩展KMP

    慢慢研究可以发现,可以用扩展kmp来求.由于扩展kmp的next[]只有一部分,当前位子前面那部分和母串的后部分,所以可以将字符串复制接在后面一次. 先求如果next[]>0&& ...

  6. HDU 3336 扩展kmp

    题目大意: 找到字符串中所有和前缀字符串相同的子串的个数 对于这种前缀的问题,通常通过扩展kmp来解决 其实吧这是我第一次做扩展kmp的题目,原来确实看过这个概念,今天突然做到,所以这个扩展kmp的模 ...

  7. acdream1116 Gao the string!(扩展KMP)

    今天是字符串填坑的一天,首先填的第一个坑是扩展KMP.总结一下KMP和扩展KMP的区别. 在这里s是主串,t是模式串. KMP可以求出的是以s[i]为结尾的串和 t前缀匹配的最长的长度.假如这个长度是 ...

  8. hdu 4333(扩展kmp)

    题意:就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数字中,比原数字小的,相等的,大的分别有多少个.比如341-->134-->413-->3 ...

  9. 扩展KMP题目

    hdu4333 /* 题意:字符串s[0..n-1],每次把最后一个字符放到前面,求形成的字符串比最初串分别小,相同,大于的个数 因为是为了练习扩展KMP所以肯定是扩展KMP, 为了循环方便,在后面复 ...

随机推荐

  1. 使用Burpsuite破解Webshell密码

    Burp Suite 是用于攻击web  应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP  消息,持久性,认证 ...

  2. Codeforces Round #267 Div2 C George and Job --DP

    题意:把长度为n的序列分成k个m长的连续小序列,这些连续小序列的和最大是多少. 解法:显然DP. 定义: dp[i][j] 为前 i 个元素分成j个m端,且 i 是第j个的末尾的最大和. 那么有: d ...

  3. Fix "Missing Scripts"

    一.Missing Scripts(脚本引用丢失) 请看下面的两张图的Warn(脚本引用丢失),在某些情况下我们会遇到这个警告. 二.解决办法 参考资料 http://unitygems.com/la ...

  4. java 14-3 正则表达式的分割

    分割功能 String类的public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串. 例子: 可以用来做年龄段的筛选,比如说,我要筛选18-26之间 ...

  5. Java虚拟机工作原理详解 ( 二 )

    首先这里澄清两个概念:JVM实例和JVM执行引擎实例,JVM实例对应了一个独立运行的Java程序,而JVM执行引擎实例则对应了属于用户运行程序的线程:也就是JVM实例是进程级别,而执行引擎是线程级别的 ...

  6. Maya FEM节点框架完成

    这几天把物理模拟框架移植到maya之中了. maya编程有一点比较关键,就是要让自己的程序逻辑适应maya的节点求值机制.在物理模拟中,往往需要进行时间积分,对此我的解决办法是,写一个节点rigSim ...

  7. Jsp c标签数值格式化

    整数带千分符显示:<fmt:formatNumber value="${num}" type="number"/> 整数显示:<fmt:for ...

  8. 利用concat进行数组复制

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 20SpringMvc_结果的转发可共享参数;重定向不能共享参数

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definiti ...

  10. HttpClient通过Post上传文件(转)

    在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理. 但是项目中涉及到既要传递普通参数,也要传递多个文件 ...