算法-KMP算法

时间复杂度:

java 复制代码
public int strStr(String haystack, String needle) {
        int[] next = new int[needle.length()];
        //next数组的生成
        next[0] = 0;
        int prefixLen = 0;//共同前后缀长度
        int i = 1, j = 1;//i,j复用
        while (i < needle.length()) {
            if (needle.charAt(prefixLen) == needle.charAt(i)) {
                prefixLen++;
                next[j++] = prefixLen;
                i++;
            } else {
                if (prefixLen == 0) {
                    next[j++] = 0;
                    i++;
                } else {
                    prefixLen = next[prefixLen - 1];
                }
            }
        }

        i = j = 0;
        while (i < haystack.length()) {
            if (haystack.charAt(i) == needle.charAt(j)) {
                i++;
                j++;
            } else if (j > 0) {
                j = next[j - 1];
            } else {
                i++;
            }
            if (j == needle.length())
                return i - j;
        }
        return -1;
    }
相关推荐
业精于勤的牙20 小时前
浅谈:算法中的斐波那契数(二)
算法·职场和发展
陈文锦丫21 小时前
MQ的学习
java·开发语言
乌暮21 小时前
JavaEE初阶---线程安全问题
java·java-ee
爱笑的眼睛1121 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
不穿格子的程序员21 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
liuyao_xianhui21 小时前
寻找峰值--优选算法(二分查找法)
算法
dragoooon3421 小时前
[hot100 NO.19~24]
数据结构·算法
Seven9721 小时前
剑指offer-52、正则表达式匹配
java
代码or搬砖21 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
青蛙大侠公主21 小时前
Thread及其相关类
java·开发语言