当前位置: 首页 > ai >正文

29-算法打卡-字符串-KMP算法理论2-第二十九天

1、KMP算法前缀表计算逻辑

可以查看上一章节的前缀表概念以及逻辑,KMP算法基础理论[基础概念、前缀、后缀、最长公共前后缀、前缀表]

2、KMP算法前缀表使用

当模式串和文本串匹配失败的时候,前缀表会告诉我们下一次的匹配中,模式串应该跳到那个位置。
a、文本串和模式串指向的字符相等则继续向下移动
b、文本串和模式串指向的字符不相等则模式串向左移动到对应next数组的前一位对应的数值。
        如图中,模式串向左移动2位。

3、获取KMP算法前缀表

3.1 思路

a、初始化:两个指针i,j;  j即是指向前缀的末尾也表示子串的最长公共前后缀长度;i是指向后缀的末尾也是指向next数组待更新的位置; j=0; next[0]=j
b、前后缀相同:指针j向右移动
c、前后缀不同:指针j移动到next[j-1]的位置
d、更新next数组

3.2 代码实现

private void getNext(int[] next, String s) {int j = 0; // 初始化next[0] = 0;for (int i = 1; i < s.length(); i++) {while (j > 0 && s.charAt(j) != s.charAt(i))  j = next[j - 1]; if (s.charAt(j) == s.charAt(i)) j++;next[i] = j; }}

http://www.xdnf.cn/news/2175.html

相关文章:

  • C语言HashTable基本理解
  • Android studio学习之路(八)---Fragment碎片化页面的使用
  • Git使用教程(含常见问题解决)
  • Raptor码的解码成功率matlab实现
  • STM32的开发环境介绍
  • 嵌入式学习笔记 - SPI通讯协议
  • 内存四区(栈)
  • 深入理解N皇后问题:从DFS到对角线优化
  • 深入剖析 TypeScript 基础类型:string、number、boolean 的声明与使用
  • 神经网络笔记 - 感知机
  • 常用财务分析指标列表
  • JAVA后端开发常用的LINUX命令总结
  • 高精度3D圆弧拟合 (C++)
  • Dijkstra算法对比图神经网络(GNN)
  • c++_csp-j算法 (5)
  • 系统架构设计(三):质量属性
  • 安全生产知识竞赛宣传口号160句
  • Java面向对象(OOP)终极指南:从基础到高级应用
  • OSPF的不规则区域和特殊区域
  • Spring 声明配置类:@Configuration
  • 基于Python+Neo4j实现新冠信息挖掘系统
  • 力扣面试150题--合并两个有序链表和随机链表的复制
  • BT152-ASEMI机器人率器件专用BT152
  • TEC制冷片详解(STM32)
  • 电机试验平台:实现精准测试与优化设计
  • 【开源飞控】调试
  • 统计定界子数组的数组
  • 下垂控制属于构网型控制技术
  • pytest 技术总结
  • CCF CSP 第30次(2023.05)(4_电力网络_C++)