《算法4》书中关于KMP算法的完整试下如下:
public class KMP
{
private String pat ;
private int[][] dfa ;
public KMP(String pat)
{
this.pat = pat ;
int M = pat.length() ;
int R = 256 ;
dfa = new int[R][M] ;
dfa[pat.charAt(0)][0] = 1 ;
for(int X=0 , j=1 ; j<M ; j++)
{
for(int c=0 ; c<R ; c++)
dfa[c][j] = dfa[c][X] ;
dfa[pat.charAt(j)][j] = j+1 ;
X = dfa[pat.charAt(j)][X] ;
}
}
public int search(String txt)
{
int i , j , N=txt.length() , M = pat.length() ;
for(i=0 , j=0 ; i<N && j<M ; i++)
{
j = dfa[txt.charAt(i)][j] ;
}
if(j == M)
return i - M ; //找到匹配
else
return N ; //表示为匹配
}
}
我唯一不理解的地方时在构造dfa数组时x的计算方法, 为什么X = dfa[pat.charAt(j)][X]?
翻翻过去那场雪
相关分类