poj 2752

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int max_=4e5+;
char str[max_];
int ans[max_],nex[max_];
int tot;
void getnext(int n)
{
int i=,k=-;
nex[]=-;
while(i<n)
{
while(k>-&&str[k]!=str[i])
k=nex[k];
nex[++i]=++k;
}
}
void solve(int n)
{
int i=n;
tot=;
while(i>-)
{
if(str[i-]==str[n-])
ans[++tot]=i;
i=nex[i];
}
}
int main()
{
while(gets(str))
{
int len=strlen(str);
getnext(len);
solve(len);
for(int i=tot;i>=;i--)
{
printf("%d ",ans[i]);
}
printf("\n");
}
}

poj 3080

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
const int N=+,max_=+;
string s[N];
int nex[max_];
void getnext(string str)
{
int n=str.size();
int i=,k=-;
nex[i]=k;
while(i<n)
{
while(k>-&&str[i]!=str[k])
k=nex[k];
nex[++i]=++k;
}
}
bool kmp(string str,string mo)
{
int n=str.size(),m=mo.size();
int i=,j=;
while(i<n&&j<m)
{
while(str[i]!=mo[j]&&j>-)
j=nex[j];
i++,j++;
}
if(j==m)
return ;
return ;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<n;i++)
cin>>s[i];
string ans="";
for(int j=;j<=s[].size();j++)
{
for(int i=;i+j<=s[].size();i++)
{
bool flag=;
string op=s[].substr(i,j);
getnext(op);
for(int ii=;ii<n;ii++)
{
if(kmp(s[ii],op)==)
{
flag=;
break;
}
}
if(!flag)
{
if(ans.size()<op.size())
ans=op;
else if(ans.size()==op.size())
ans=min(ans,op);
}
}
}
if(ans.size()>=)
cout<<ans<<endl;
else
cout<<"no significant commonalities"<<endl;
}
}

hdu   2594

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
const int max_=5e5+;
using namespace std;
char str[max_],mo[max_];
int nex[max_];
void getnext(int n)
{
int i=,k=-;
nex[i]=-;
while(i<n)
{
while(str[i]!=str[k]&&k>-)
k=nex[k];
nex[++i]=++k;
}
}
void solve(int n,int m)
{
int i=,j=;
while(j<m)
{
while(str[i]!=mo[j]&&i>-)
i=nex[i];
i++,j++;
// printf("%d\n",j);
}
if(i<=)
printf("0\n");
else
{
for(int ii=;ii<i;ii++)
printf("%c",str[ii]);
printf(" %d\n",i);
}
}
int main()
{
while(scanf("%s %s",str,mo)!=EOF)
{
// cout<<str<<endl<<mo<<endl;
int n=strlen(str);
int m=strlen(mo);
getnext(n);
solve(n,m);
}
}

KMP2的更多相关文章

  1. [日常训练]article

    Description 小今天来写作文啦! 小非常善于堆砌辞藻.在洋洋洒洒写了一长篇之后,小发现作文中很多段落都似曾相识.小认为,如果一段字符在文章开头,结尾和中间都出现过,那么这段字符就可以被认为是 ...

  2. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  3. 【算法Everyday】第三日 KMP算法

    题目 你知道的. 分析 分析不来. 代码 void OutputArray(int* pArr, int iLen) { ; i < iLen; i++) { printf("%d\t ...

  4. KMP 模式串匹配 失去匹配的瞬间你还有什么

    KMP: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法).KMP算法的关键 ...

  5. 《算法》第五章部分程序 part 5

    ▶ 书中第五章部分程序,包括在加上自己补充的代码,Knuth-Morris-Pratt 无回溯匹配,Boyer - Moore 无回溯匹配,Rabin - Karp 指纹匹配 ● Knuth-Morr ...

  6. 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)

    本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...

  7. KMP算法的时间复杂度与next数组分析

    一.什么是 KMP 算法 KMP 算法是一种改进的字符串匹配算法,用于判断一个字符串是否是另一个字符串的子串 二.KMP 算法的时间复杂度 O(m+n) 三.Next 数组 - KMP 算法的核心 K ...

  8. 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)

    --喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...

  9. 2019.10.22 csp-s模拟测试82 反思总结

    重来重来,刚刚就当什么都没发生 今天的题属实有些迷惑,各种意义上…总之都很有难度吧.不满归不满,这套题的确不是什么没有意义的题目. 为了考验自己的学习能力记忆力,决定不写题解,扔个代码完事了 其实是懒 ...

随机推荐

  1. 11-vim-撤销和删除命令-01-撤销

    撤销和恢复撤销 命令 英文 功能 u undo 撤销上一次命令 ctrl  u redo 恢复撤销的命令

  2. Pytest使用自定义标记mark只执行部分用例

    • 场景:只执行符合要求的某一部分用例 可以把一个web项目划分多个模块,然后指定模块名称执行. App自动化时,如果想Android和IOS公用一套代码时,也可以使用标记功能,标明哪些是IOS 的用 ...

  3. 使用JDBC获取SQL自动增长的ID

    在项目开发中,遇到一个问题,先添加一条记录然后想立刻获取这条记录的ID值,ID由SQLServer自动增长的,如果先插入再查询的话,需要另外执行一条查询ID的SQL语句,因此有了下面的方法: 1.使用 ...

  4. 案例:forEach和some区别

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

  5. 【记录】VScode快捷键大全

    记住快捷键能够提高工作效率 Ctrl+Shift+P,F1 展示全局命令面板 Ctrl+P 快速打开最近打开的文件 Ctrl+Shift+N 打开新的编辑器窗口 Ctrl+Shift+W 关闭编辑器 ...

  6. (PASS)break 和 continue 的区别

    1  break;  while循环中,break是用于永久终止循环.即不执行本次循环中break后面的语句,直接跳出循环. 终止,跳出,结束循环(可以作用在任何地方).也常与switch分支结构合用 ...

  7. 获取请求url中的参数

    一.根据request获取参数 假设请求地址是: http://127.0.0.1:8020/books/?title=语文 那么后台的路由配置: re_path('books/$', views.B ...

  8. Fiddler,对数据进行抓包,拦截,修改等操作

    转载....... 一.fiddler设置fiddler默认是只能抓取http网络格式的,所以我们要先设置下使fiddler可以获取到https网络格式 首先tools→options→https进去 ...

  9. 修改Centos中的ll命令(以 K 为单位显示文件大小)

    修改CentOS ll命令:以K 为单位显示文件大小 1.编辑 .bashrc 文件:vim /root/.bashrc 2.找到 alias ll 行修改为(如果没有直接添加该行):alias ll ...

  10. 自定义solr域中的配置

    <!-- IKAnalyzer--> <fieldType name="text_ik" class="solr.TextField"> ...