我们定义2个字符串的相似度等于两个串的相同前缀的长度。例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 "aaab" 的相似度为3。

给出一个字符串S,计算S同他所有后缀的相似度之和。例如:S = "ababaa",所有后缀为:
 
ababaa 6
babaa 0
abaa 3
baa 0
aa 1
a 1
 
S同所有后缀的相似度的和 = 6 + 0 + 3 + 0 + 1 + 1 = 11

Input输入一个字符串S(1 <= L <= 1000000),L为字符串S的长度,且S由a-z的小写字母组成。Output输出S同所有后缀的相似度的和。Sample Input

ababaa

Sample Output

11

:  KMP可以求S串以i结尾的后缀与T串的前缀最长公共串长度。

: 扩展KMP可以求S串以i为起点的的后缀与T串的前缀的最长公共字串。

此题就是求所有i的扩展KMP长度;

以前学过,已经忘得差不多了。这里再抄一发。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N = ;
int next[N],extand[N];
char S[N]; long long ans;
void getnext(){
int i,length=strlen(S+);
next[]=length;
for(i=;i+<length&&S[i+]==S[i+];i++);
next[]=i;
int a=;
for(int k=;k<=length;k++){
int p=a+next[a]-, L=next[k-a+];
if(L>=p-k+){
int j=(p-k+)>?(p-k+):;
while(k+j<=length&&S[k+j]==S[j+]) j++;
next[k]=j, a=k;
}
else next[k]=L;
}
for(int i=;i<=length;i++) ans+=next[i];
printf("%lld\n",ans);
}
int main(){
scanf("%s",S+);
getnext();
return ;
}

51Nod - 1304 :字符串的相似度 (裸的扩展KMP)的更多相关文章

  1. 51nod 1304 字符串的相似度(exkmp)

    拓展kmp裸题 自己跟自己匹配即可 模板测试=v= #include <iostream> #include <cstring> using namespace std; ; ...

  2. 51Nod 1277 字符串中的最大值(KMP,裸题)

    1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: ...

  3. C# 计算两个字符串的相似度

    我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能. 现在提供一个比较两个字符串相似度的方法. 通过计算出两个字符串的相似度,就可以通过Linq在内 ...

  4. 实现List按与一个字符串的相似度和字母顺序排序(适用于模糊查询后的排序)

    因公司业务需要,自己写了一个,保存起来以后可能还会用到.如果还有更好的方法或者算法,希望大家提出来. 1.简单的相似度算法(自己想到的)      因为List中每个String都会包含一个标准的字符 ...

  5. Levenshtein Distance + LCS 算法计算两个字符串的相似度

    //LD最短编辑路径算法 public static int LevenshteinDistance(string source, string target) { int cell = source ...

  6. 利用编辑距离(Edit Distance)计算两个字符串的相似度

    利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...

  7. C# 中如何判断字符串的相似度

    基于 F23.StringSimilarity.dll  组件.Github 上可以搜索到该组件. 核心方法: var l = new Levenshtein(); double tempValue ...

  8. SQL Server对比两字符串的相似度(函数算法)

    一.概述    最近有人问到关于两个字符串求相似度的函数,所以就写了本篇文章,分别是“简单的模糊匹配”,“顺序匹配”,“一对一位置匹配”.在平时的这种函数可能会需要用到,业务需求不一样,这里只给出参照 ...

  9. 51nod 1277 字符串中的最大值

    题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #inc ...

随机推荐

  1. 谈oracle数据比对(DBMS_COMPARISON)

    今天是2014-08-19,我今天收到csdn给我发的申请博客专家的邀请,自己感觉实在羞愧啊. 自从换了工作也一直没有精力在写点东西了.今天我一个同事,在群里贴出了一个数据比对的包(DBMS_COMP ...

  2. libevent和libev的区别对比

    参考了这篇文章: http://www.cnblogs.com/Lifehacker/p/whats_the_difference_between_libevent_and_libev_chinese ...

  3. Mac 安装配置Mysql

    Mac下安装配置Mysql By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 下载安装 去官网下载Community版本号的mysql安装文件. ...

  4. 安装odoo 9实录

    安装Ubuntu,省略 下载 odoo源码 使用 git 下载源码 mkdir /opt/openerp/server cd /opt/openerp/server git clone https:/ ...

  5. php empty、isset、is_null区别

    有关 PHP 的 empty(),isset() 还有 is_null() 这三个函数的用法讨论得已经很多了,而且很多资料也未必能说得很清楚.这里再重复一次,但不是从概念去说,直接用程序例子来说话,应 ...

  6. Layout规则总结

    一.尺寸要求 1.过孔到焊盘的距离多少合适? 6mil左右 2.铜皮到边框的距离多少合适? 极限8mil,通常12,最好做到20,40 3.Thermal焊盘打地孔个数? 正方形 3*3  4*4   ...

  7. java 回文字符串

    package string.string1_5; public class Palindrome { /** * 从两头向中间移动 * @param str * @return */ public ...

  8. C# 操作World生成报告

    直接上代码 using System; using System.IO; using System.Data; using Word = Microsoft.Office.Interop.Word; ...

  9. 10个必需的iOS开发工具和资源

    本文转载至 http://mobile.51cto.com/iphone-418166.htm 界面总不是一件很容易事,尤其是iPhone/iPad的界面,做过iOS开发的程序员,一定会感到开发iPh ...

  10. Erlang Shell调试网络程序真方便

    Erlang的shell功能强大,这里我将它当成我的客户端.可以动态的输入你需要发送的内容,也可以动态的接收内容,就像调试器一样,在开发过程中起到很重要的作用.具体使用方式如下: C:\Documen ...