E81086713E446D36F62B2AA2A3502B5EB155

Java杂家

杂七杂八。。。一家之言

BlogJava 首页 新随笔 联系 聚合 管理
  141 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
**
 
* Demonstrate KMP algorithm in Java
 
*
 
*
 
*/
public class KMP {
    
    
    
public static int indexOf(String target,String pattern)
    {
        
int pLen=pattern.length();
        
int tLen=target.length();
        
        
//the fail function
        int failFunc[]=new int[pLen];
        
        failFunc[
0]=-1;
        
        
//build fail function
        for(int i=1;i<pLen;i++)
        {
            
int j=failFunc[i-1];
            
while(pattern.charAt(i)!=pattern.charAt(j+1)&&j>=0)
            {
                
//recursion 
                j=failFunc[j];
            }
            
if(pattern.charAt(i)==pattern.charAt(j+1))
            {
                failFunc[i]
=j+1;
            }
            
else 
            {
                failFunc[i]
=-1;
            }
        }

        
int pPos=0,tPos=0;
        
        
while(tPos<tLen&&pPos<pLen)
        {
            
if(target.charAt(tPos)==pattern.charAt(pPos))
            {
                
//match ,then do forward
                tPos++;
                pPos
++;
            }
            
else if(pPos==0)
            {
                
//target go forward
                tPos++;
            }
            
else
            {
                
//target postion don't change,pattern go back  
                pPos=failFunc[pPos-1]+1;
            }
        }
        
        
if(pPos<pLen)return -1;
        
else return tPos-pLen;
        
        
        
    }

}

posted on 2007-07-10 18:19 DoubleH 阅读(533) 评论(0)  编辑  收藏 所属分类: Memorandum

只有注册用户登录后才能发表评论。


网站导航: