kmp算法java代码实现——使用next数组实现对目标字符串查找

kmp算法java代码实现——使用next数组实现对目标字符串查找

代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String str2 = sc.next();
        char a[] = str.toCharArray();
        char b[] = str2.toCharArray();
        int next[] = new int[b.length];
        for (int i = 0; i <b.length ; i++) {
            next[i] =next(b,i+1);
        }
        int bl=0;
        for (int i = 0; i <a.length ; i++) {
            if (a[i] == b[bl]){
                bl++;
                if (bl == b.length){
                    System.out.println("匹配成功,有相同字符串");
                    break;
                }
            }else{
                if (next[bl] == 0&&bl != 0){
                    i--;
                }
                bl = next[bl];
                if (i+b.length >a.length){
                    System.out.println("无法匹配,没用相同字符串");
                    break;
                }
            }

        }





    }

    private static int next(char a[],int l){
        int max = 0;
        int length = l;
        for (int i = length-1; i >0 ; i--) {
            int count = 0;
            for (int j = 0; j <length-i ; j++) {
                if (a[j] == a[j+i]){
                    count++;
                    if (count>max)
                    {
                        max = count;
                    }
                }else{
                    count=0;
                }
            }
        }
        return max;
    }
}

由于是笔者自己学习理解的时候写的,可能有不够简洁的地方,请指正
这个代码不能区分大小写 如输入:
AAAAAA
aaa

输出的是:无法匹配,没用相同字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值