一、串的基本操作
二、串的模式匹配
1、简单的模式匹配算法
int index(String S,String T){
int i=1,j=1;
while(i<=S.length && j<=T.length){
if(S.ch[i]==T.ch[j]){
++i;
++j;
}
else{
i=i-j+2;
j=1;
}
}
if(j>T.length) return i-T.length;
else return 0;
}
2、改进的模式匹配算法-----KMP算法
(1)字符串的前后和部分匹配值
以串 ‘ababa’ 为例说明:
由上可得,字符串‘ababa’的部分匹配值为00123。
部分匹配值的作用:
(2)KMP算法
next求解:
KMP:
(3)KMP案例:P=aabaac,T=aabaabaabaac
- 求解模式串P的next数组
a:0
aa:1
aab:0
aaba:1
aabaa:2
aabaac:0
部分匹配值为:
aabaac
010120
然后将部分匹配值向右移动一位,左边添加-1,
a abaac
-101012
然后再分别加一,得到最终的next数组。
- 进行KMP模式匹配
第一趟:此时从 i=0,j=0开始匹配,i=6,j=6时失配,因此 j=next[j],i不变;
第二趟:此时从 i=6,j=next[j]=3开始匹配,当 i=9,j=6时失配,因此 j=next[j],i不变;
第三趟:此时从 i=9,j=next[j]=3开始匹配,匹配成功。