zoukankan
html css js c++ java
KMP 字符串匹配算法
#include
"
stdafx.h
"
#include
<
string.h
>
#include
<
iostream
>
#include
<
vector
>
using namespace std ;
//
模式匹配,kmp算法,复杂度O(m+n)
//
返回匹配位置,-1表示匹配失败,传入匹配串和模式串和长度
//
可更改元素类型,更换匹配函数
#define MAXN
100
#define _match(a,b) ((a)
==
(b))
typedef
char
elem_t;
int
kmp_match(
int
ls,elem_t
*
str,
int
lp,elem_t
*
pat)
...
{
int
fail[MAXN]
=
...
{
-
1
}
, i
=
0
,j;
for
(j
=
1
;j
<
lp;)
...
{
if
(pat[i]
!=
pat[j] )
...
{
fail[j
++
]
=-
1
;
continue
;
}
for
(i
=
0
; j
<
lp
&&
_match(pat[i],pat[j]) ; fail[j
++
]
=
i
++
) ;
}
for
(i
=
j
=
0
;i
<
ls
&&
j
<
lp;i
++
)
...
{
if
(_match(str[i],pat[j]))
j
++
;
else
if
(j)
j
=
fail[j
-
1
]
+
1
,i
--
;
}
return
j
==
lp
?
(i
-
lp):
-
1
;
}
int
kmp(string str1, string str2)
...
{
if
(str1.size()
<
str2.size())
return
-
1
;
size_t i, j ;
vector
<
int
>
fail ;
fail.resize(str2.size(),
-
1
) ;
for
(j
=
1
, i
=
0
; j
<
str2.size();
++
j)
...
{
if
(str2[j]
!=
str2[i])
continue
;
for
(i
=
0
; j
<
str2.size()
&&
str2[j]
==
str2[i] ; fail[j
++
]
=
i
++
) ;
--
j ;
}
for
(i
=
j
=
0
; i
<
str2.size()
&&
j
<
str1.size();
++
j)
...
{
if
(str1[j]
==
str2[i])
++
i ;
else
if
(i)
i
=
fail[i
-
1
]
+
1
,
--
j ;
}
return
i
==
str2.size()
?
j
-
i :
-
1
;
}
int
_tmain(
int
argc, _TCHAR
*
argv[])
...
{
char
*
str1
=
"
abababababcabababa
"
;
char
*
str2
=
"
ababababcab
"
;
int
i
=
kmp_match(strlen(str1),str1,strlen(str2),str2) ;
cout
<<
i
<<
endl ;
i
=
kmp(str1,str2) ;
cout
<<
i
<<
endl ;
getchar() ;
return
0
;
}
查看全文
相关阅读:
stylish——一键为网页换肤,改变字体大小,去除广告
css3实现可以计算的自适应布局——calc()
用一个div模拟textarea并实现高度自适应
关于background定位
CSS3 :nth-of-type() 选择器
css3圣诞雪景球
ie6、7、8兼容部分css3
html5 录制mp3音频,支持采样率和比特率设置
html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器
grunt配置太复杂?使用Qbuild进行文件合并、压缩、格式化等处理
原文地址:https://www.cnblogs.com/sunkang/p/2038832.html
最新文章
浅谈——并查集
浅谈——最小生成树kruskal
浅谈——线段树
链式前向星(系列)
Dijkstra(堆优)模板
状压dp入门
IDEA连接MySql
JDK环境配置_Tomcat和IDEA整合
如何使a == 1 && a== 2 && a == 3?
redis整合-XMIND
热门文章
redis集群
Docker操作错误历史线
docker操作错误记录
docker操作记录
Nginx
Git下载以及安装
VS2017 GitHub 插件的安装和使用
此实现不是Win平台FIPS验证的加密算法的一部分
asp .net 面试问题整理(给自己整理的,有许多东西在不断更新)
King 文编编辑器的使用
Copyright © 2011-2022 走看看