您的位置:首页 > 编程语言 > Java开发

[算法]字符串匹配算法KMP(java)

2017-01-16 10:56 387 查看
参考http://www.tuicool.com/articles/e2Qbyyf

public class KMP {

public static void cal_next(String str,int[] next,int len){
int i, j;

next[0] = -1;
for( i = 1; i < len; i++ )
{
j = next[ i - 1 ];
while( str.charAt(j+1) != str.charAt(i)&& ( j >= 0 ) )
{
j = next[ j ];
}
if( str.charAt(i) == str.charAt(j+1) )
{
next[ i ] = j + 1;
}
else
{
next[ i ] = -1;
}
}
}

public static int KMP(String str, int slen, String ptr, int plen, int[] next ){
int s_i = 0, p_i = 0;

while( s_i < slen && p_i < plen )
{
if( str.charAt(s_i) == ptr.charAt(p_i))
{
s_i++;
p_i++;
}
else
{
if( p_i == 0 )
{
s_i++;
}
else
{
p_i = next[ p_i - 1 ] + 1;
}
}
}
return ( p_i == plen ) ? ( s_i - plen ) : -1;
}
public static void main(String[] args) {
final int n=100;

String str,ptr;
int slen, plen;
int next[]=new int
;
Scanner in = new Scanner(System.in);

while((str=in.nextLine())!=null && (ptr=in.nextLine())!=null){

slen=str.length();
plen=ptr.length();
cal_next(ptr, next, plen);
System.out.println(KMP(str, slen, ptr, plen, next));
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法