kmp算法&&学习感想

kmp

package 串的模式匹配;

/**
 * Created by h on 16-12-18.
 */
public class Solution {

    public int findAppearance(String A, int lena, String B, int lenb) {
        int[] next = new int[lenb];
        buildNext(next, B, lenb);
        int i = 0;
        int j = 0;
        while (true) {
            if (i == lena && j != lenb) {
                break;
            }
            if (j == lenb) {
                return i - j;
            }
            if (j < 0 || A.charAt(i) == B.charAt(j)) {
                i++;
                j++;
            } else {
                j = next[j];
            }
        }
        return -1;
    }

    private void buildNext(int[] next, String P, int lenP) {
        next[0] = -1;
        for (int i = 1; i < lenP; i++) {
            if (next[i-1] < 0 || P.charAt(i - 1) == P.charAt(next[i - 1])) {
                next[i] = next[i - 1] + 1;
            } else {
                next[i] = 0;
            }
        }
//        for (int i:
//             next) {
//            System.out.print(i + " ");
//        }
//        System.out.println();

    }

    public static void main(String[] args) {
        String A = "djkfkdjfkldjfldj";
        int lenA = A.length();
        String B = "fk";
        int lenB = B.length();
        System.out.println(new Solution().findAppearance(A, lenA,B,lenB));
    }
}

学习感想

    这个算法我在这两年里学习了四遍,现在可以快速地独立地手写。说明有时候要吃透一个知识点,要反反复复学习好几遍 ,很多以前会的东西,现在回头去看,居然可以有更深刻的理解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值