IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【KMP】 -> 正文阅读

[C++知识库]【KMP】

#include <iostream>

using namespace std;

const int N = 100010, M = 1000010; // N 为匹串长度, M 为模式串长度

int n, m;
int ne[N];
char p[N], s[M]; // p 为匹配串, s 为模式串 

int main(){
    cin >> n >> p + 1 >> m >> s + 1; // 从下标为1开始
    
    // 求 next[] 数组
    // index 1 2 3
    // value 0 0 1
    for ( int i = 2, j = 0; i <= n; i ++ ) {
        while ( j && p[i] != p[j + 1] ) j = ne[j];
        if ( p[i] == p[j + 1] ) j ++;
        ne[i] = j;
    }

    // KMP 模式匹配
    for ( int i = 1, j = 0; i <= m; i ++ ) {
        while ( j && s[i] != p[j + 1] ) j = ne[j];
        if ( s[i] == p[j + 1] ) j ++;
        if (j == n) {
            cout << i - n << " ";
            j = ne[j];
        }
    }
    
    return 0;
}
/**
 * @param {string} haystack
 * @param {string} needle
 * @return {number}
 */
var strStr = function(haystack, needle) {

    if ( haystack == "" && needle == ""){
        return 0;
    }

    let len1 = needle.length; // 匹配串长度
    let len2 = haystack.length; // 模式串长度
    const ne = new Array(len1).fill(0);

    // next[] 数组
    for ( let i = 1, j = 0; i < len1; i ++ ) {
        while ( j > 0 && needle[i] !== needle[j] ) j = ne[j - 1];
        if ( needle[i] == needle[j] ) j ++;
        ne[i] = j;
    }

    // KMP
    for ( let i = 0, j  = 0; i < len2; i ++ ) {
        while ( j > 0 && haystack[i] != needle[j]) j = ne[j - 1];
        if ( haystack[i] == needle[j] ) j ++;

        if (j == len1 ){
            return i - len1 + 1;
        }
    }

    return -1;
};

四月份结束会KMP就行,要求不高😓。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:21:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:57:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码