算法-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;
    }
相关推荐
阿Y加油吧5 分钟前
力扣打卡——盛最多水的容器、三数之和
算法·leetcode·排序算法
代码探秘者6 分钟前
【大模型应用】1.了解RAG
java·人工智能·python·spring
sevenlin9 分钟前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
Barkamin10 分钟前
快速排序非递归实现
java·算法·排序算法
gihigo199814 分钟前
距离角度解耦法的MIMO-OFDM雷达波束形成及优化MATLAB实现
开发语言·算法·matlab
WolfGang00732114 分钟前
代码随想录算法训练营 Day12 | 二叉树 part02
算法·深度优先
认真的小羽❅15 分钟前
0-1手写通用的 Excel 导入/导出工具类
java·excel
独自破碎E19 分钟前
【面试真题拆解】Java锁机制:synchronized、ReentrantLock、锁升级、可重入锁
java·开发语言·面试
努力往上爬de蜗牛20 分钟前
extends
java·开发语言
2401_8535765020 分钟前
代码自动生成框架
开发语言·c++·算法