zoukankan      html  css  js  c++  java
  • KMP算法模版

    KMP算法模版(左神的程序员代码面试指南第二版KMP算法)

    public class KMP {
    
        /**
         * @param s 匹配串
         * @param m 模式串
         * @return 匹配成功返回匹配串的匹配成功的字符串首个位置,匹配失败返回-1
         */
        public int getIndexOf(String s, String m) {
            if (s == null || m == null || m.length() < 1 || s.length() < m.length()) {
                return -1;
            }
    
            char[] ss = s.toCharArray();
            char[] ms = m.toCharArray();
    
            int si = 0;
            int mi = 0;
    
            int[] next = getNextArray(ms);
    
            while (si < ss.length && mi < ms.length) {
                if (ss[si] == ms[mi]) {
                    si++;
                    mi++;
                } else if (next[mi] == -1) {
                    si++;
                } else {
                    mi = next[mi];
                }
            }
    
            return mi == ms.length ? si - mi : -1;
        }
    
        /**
         * 获得next数组
         *
         * @param ms 模式串
         * @return 返回next数组
         */
        public int[] getNextArray(char[] ms) {
            if (ms.length == 1) {
                return new int[]{-1};
            }
    
            int[] next = new int[ms.length];
            next[0] = -1;
            next[1] = 0;
    
            int pos = 2;
            int cn = 0;
    
            while (pos < next.length) {
                if (ms[pos - 1] == ms[cn]) {
                    next[pos++] = ++cn;
                } else if (cn > 0) {
                    cn = next[cn];
                } else {
                    next[pos++] = 0;
                }
            }
            return next;
        }
    
        public static void main(String[] args) {
            KMP kmp = new KMP();
            System.out.println(kmp.getIndexOf("acbc", "bc"));
            System.out.println(kmp.getIndexOf("acbc", "bcc"));
        }
    }
  • 相关阅读:
    QT 信号与槽 中传递自定义数据类型
    keil5 仿真时发现函数不能进入到main函数
    QT 报错分析 一
    QT 简易时间处理
    QT 编译出现 Custom Executable 对话框 问题
    win10 下装ubuntu双系统
    Vmware linux下不能联网
    Vmware Workstation
    免费在线作图,实时协作
    SVN常用问题汇总
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12729487.html
Copyright © 2011-2022 走看看