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

数据结构(4)--------------- 串

目录

1、定义

2、串的基本操作

3、串的存储结构

4、基本操作实现

4.1、求子串

4.2、比较两个字符串大小

4.3、定位操作

5、字符串相关算法

5.1、朴素模式匹配算法

5.2、KMP算法

5.2.1、实现思想

5.2.2、求next数组

5.2.3、KMP进一步优化


1、定义

        串,即字符串是由0个(空串)或多个字符组成的有限序列。

字串:串种任意个连续的字符组成的子序列;

主串:包含字串的串;

字符在主串中的位置:字符在串种的序号;

子串在主串种的位置:子串的第一个字符在主串种的位置;

2、串的基本操作

3、串的存储结构

顺序存储:

链式存储:

4、基本操作实现

4.1、求子串

4.2、比较两个字符串大小

4.3、定位操作

5、字符串相关算法

5.1、朴素模式匹配算法

        比如在word或搜索引擎内匹配一段文字,也就是在主串种找到与模式串相同的子串;(模式串中不一定能在字串中找到

实现方法:

1、直接暴力检索,将主串中所有长度为m的子串依次与模式串对比(若比对失败则向右移动1位并继续匹配),直到找到一个完全匹配的子串,或所有子串都不匹配为止;(之后返回匹配到的子串的头位置就行

5.2、KMP算法

5.2.1、实现思想

        朴素模式匹配算法的优化版本。(相比于朴素模式,此时的主串指针是不要进行回溯的

实现思路:

1、在i的位置匹配失败;

2、让j回到1,并从i=5的位置,也就是上一次匹配失败的位置开始匹配。相比于朴素匹配,这样会少几个匹配步骤;

5.2.2、求next数组

        也就是求“模式串”在哪个字符上出现匹配失败的情况时,我们的模式串指针j需要从模式串字符中的哪个位置重新开始匹配。具体如下:        

算法中需要传入next数组,以确认当前模式串是否匹配:

5.2.3、KMP进一步优化

        如果旧位置指向的字符与当前位置指向的字符是一样的,那我们就可以将模式串的指针移动到首位。因为此时去匹配字符必定会失败。(这里其实只是优化了next数组

        具体如下图中next数组中的3号和5号字符。

                    

已知next数组,求其优化数组方法:(其实就是看next数组匹配失败后,跳转到模式串中的那一个数组位置的元素,是不是和当前匹配失败的元素一致,若一致则直接跳转到那个元素匹配失败时所要跳转的位置

        

http://www.dtcms.com/a/495884.html

相关文章:

  • 湖北网站建设网址上海有哪些做网站的
  • 最新vmware安装kali
  • 端口号、常见协议和套接字
  • YOLOv3 核心知识点解析
  • 企业网站建设费怎么记账最近时政热点新闻
  • 2022年ASOC SCI2区TOP,基于竞争与合作策略的金字塔粒子群算法PPSO,深度解析+性能实测,深度解析+性能实测
  • 深入理解C++中的浅拷贝与深拷贝:从类的拷贝函数开始
  • 公网站建设浙江最新通知今天
  • 免费高效的一站式解决多种文件处理需求的PC工具箱
  • ESXI主机重置带外密码
  • Mysql 使用not in进行数据筛选是需要主要的事项
  • Java基础——面向对象进阶复习知识点4
  • 残疾人信息无障碍网站建设摄影网页
  • 创业服务网网站建设方案项目书wordpress设置自定义主页
  • AI一键生成在线考试系统:从概念到实现的技术架构解析
  • win10LTSC图片打不开
  • 品牌网站建设预算宁夏建设局官方网站
  • SQL中Replace Into语句详解
  • 做汽车英文网站南京网站模板
  • 深入理解软件设计中的协议与规范:从理论到Java实践
  • 网站建设的商品编码广州软件开发培训机构有哪些
  • PostgreSQL 15二进制文件
  • 学习LCR电桥(手持和台式)
  • 做百度网站还是安居客网站装饰装修工程
  • 电商全渠道支付系统搭建:线上线下一体化API对接指南
  • 开发实战 - ego商城 - 2 公共方法封装
  • 制作网站的公司还能赚钱吗模拟手机营销网站
  • 桶排序
  • SpringBoot 的入门开发
  • 【JVM】详解 运行时数据区