博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据结构与算法】什么是串?什么是KMP算法?字符串匹配是什么?
阅读量:1886 次
发布时间:2019-04-26

本文共 1292 字,大约阅读时间需要 4 分钟。

串(Sequence)

串就是开发中非常熟悉的字符串,是由若干个字符组成的有限序列。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-api99a4B-1617526793724)(imgs\1.png)]

串匹配算法

本节主要研究串的匹配问题,比如:

查找一个模式串(pattern)在文本串(text)中的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLXA81ci-1617526793726)(imgs/2.png)]

几个经典的串匹配算法

  • 暴力算法
  • KMP算法

1.暴力算法

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

示例 1:

输入: haystack = “hello”, needle = “ll”

输出: 2
示例 2:

输入: haystack = “aaaaa”, needle = “bba”

输出: -1

class Solution {
public int strStr(String haystack, String needle) {
char[] s1 = haystack.toCharArray(); char[] s2 = needle.toCharArray(); int len1 = s1.length; int len2 = s2.length; if(len2==0&&len1==0){
return 0; } // 选定其开始 int i,j; for(i=0;i<=len1-len2;i++){
for(j=0;j

2.KMP算法

KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。

先在开头约定,本文用 pat 表示模式串,长度为 M,txt 表示文本串,长度为 N。KMP 算法是在 txt 中查找子串 pat,如果存在,返回这个子串的起始索引,否则返回 -1。

KMP 算法应该是,一波诡异的操作处理 pat 后形成一个一维的数组 next,然后根据这个数组经过又一波复杂操作去匹配 txt。时间复杂度 O(N),空间复杂度 O(M)。其实它这个 next 数组就相当于 dp 数组,其中元素的含义跟 pat 的前缀和后缀有关,判定规则比较复杂,不好理解。本文则用一个二维的 dp 数组(但空间复杂度还是 O(M)),重新定义其中元素的含义,使得代码长度大大减少,可解释性大大提高。

class Solution {
public int strStr(String haystack, String needle) {
int len1 = haystack.length(); int len2 = needle.length(); if(len1==0&&len2==0){
return 0; } if(len1

转载地址:http://ncwdf.baihongyu.com/

你可能感兴趣的文章
Graph Neural Networks for Social Recommendation 社交信息引入图推荐
查看>>
STAR-GCN: Stacked and Reconstructed Graph Convolutional Networks for Recommender Systems 论文阅读
查看>>
python 实现统计图像上的椭圆(ellipse) 内的信息
查看>>
Graph Learning based Recommender Systems: A Review,速览图推荐系统综述 IJCAI2021
查看>>
Session-based Recommendation with Graph Neural Networks,SR-GNN代码分析
查看>>
FGNN论文阅读
查看>>
GC-SAN,GLRS常见baseline
查看>>
SR-GNN 论文阅读
查看>>
[Session] Dual Sparse Attention Network For Session-based Recommendation 阅读笔记,AAAI21
查看>>
torch_scatter 安装
查看>>
[KG] Learning Intents behind Interactions with Knowledge Graph for Recommendation,WWW21
查看>>
python socket接收数据问题
查看>>
[code] 刷题模板
查看>>
[图解TCP/IP]TCP与UDP
查看>>
[C++学习]获取数组,字符串长度
查看>>
[Unity]getkey()与getkeydown()
查看>>
[数据结构]利用堆栈求解算术表达式
查看>>
调整数组顺序使奇数位于偶数前面
查看>>
Logistc-Tent混沌系统matlab
查看>>
合并两个排序的链表
查看>>