算法-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;
    }
相关推荐
风象南2 分钟前
SpringBoot中Redis的7种序列化策略
java·spring boot·后端
其实你热情似火14 分钟前
Java基础第21天-正则表达式
java·开发语言·正则表达式
wolf犭良23 分钟前
37、aiomysql实操习题
开发语言·python·算法
xin007hoyo32 分钟前
算法笔记.spfa算法(bellman-ford算法的改进)
数据结构·笔记·算法
向哆哆34 分钟前
Java 加密与解密:从算法到应用的全面解析
java·开发语言·算法
uhakadotcom43 分钟前
刚发布的PyTorch 2.7提供了什么 新特性
算法·面试·github
新生农民2 小时前
30分钟解决8道算法题
java·数据结构·算法
bbc1212262 小时前
2025/4/23 心得
数据结构·算法
sinat_262292113 小时前
Java面试实战:音视频场景下的微服务架构与缓存技术剖析
java·spring boot·redis·微服务·kafka·分布式系统·面试技巧
mask哥3 小时前
详解springcloudalibaba采用prometheus+grafana实现服务监控
java·nacos·springboot·grafana·prometheus·springcloud·微服务监控