您好,欢迎来到年旅网。
搜索
您的当前位置:首页KMP算法 动态规划实现

KMP算法 动态规划实现

来源:年旅网

KMP算法 动态规划实现

public class KMP {
    //pat是要匹配的字段
    private String pat;
    //dp[状态][字母对应的ASCII码] = 下一步的位置
    private int[][] dp;

    public KMP(String pat){
        this.pat = pat;
        //256是ASCII码个数
        dp = new int[pat.length()][256];
        //初始化状态
        dp[0][pat.charAt(0)] = 1;

        //X是影子状态
        int X = 0;

        for (int i = 1; i < pat.length(); i++) {
            for (int j = 0; j < 256; j++) {
                if (pat.charAt(i) == j)
                    //如果匹配,就下一步
                    dp[i][j] = i + 1;
                else
                    //不匹配就返回记忆状态
                    //X落后一个状态
                    dp[i][j] = dp[X][j];
            }
            //更新影子状态
            X = dp[X][pat.charAt(i)];
        }
    }

    public int search(String txt){
        int temp = 0;
        for (int i = 0; i < txt.length(); i++) {
            //计算下一个状态
            temp = dp[temp][txt.charAt(i)];
            //如果到达终止态返回下标
            if (temp == pat.length())
                return i - pat.length() + 1;

        }
        //没有到达终止态
        return -1;
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务