算法-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;
    }
相关推荐
JohnFF2 分钟前
48. 旋转图像
数据结构·算法·leetcode
bbc1212262 分钟前
AT_abc306_b [ABC306B] Base 2
算法
是小李呀~8 分钟前
【工作梳理】怎么把f12里面的东西导入到postman
java
攀小黑9 分钟前
Java 多线程加锁 synchronized 关键字 字符串当做key
java·开发语言
生锈的键盘10 分钟前
推荐算法实践:movielens数据集
算法
董董灿是个攻城狮11 分钟前
Transformer 通关秘籍9:词向量的数值实际上是特征
算法
林泽毅20 分钟前
SwanLab x EasyR1:多模态LLM强化学习后训练组合拳,让模型进化更高效
算法·llm·强化学习
小林熬夜学编程22 分钟前
【高并发内存池】第八弹---脱离new的定长内存池与多线程malloc测试
c语言·开发语言·数据结构·c++·算法·哈希算法
余华余华22 分钟前
2024年蓝桥杯Java B组省赛真题超详解析-分布式队列
java·职场和发展·蓝桥杯
破罐子不摔25 分钟前
【C#使用S7.NET库读取和写入西门子PLC变量】
java·c#·.net