《数据结构:从0到1》-11-字符串与模式匹配

在这里插入图片描述

一、 什么是字符串?

在数据结构中,字符串(String)是由零个或多个字符组成的有限序列。它可以被视作一种特殊的线性表,其数据元素限定为字符。字符串在日常编程中无处不在。

1.1 字符串的表示与存储

存储方式主要分为两种:

  • 顺序存储:使用一组地址连续的存储单元来存储字符串的字符序列。
  • 链式存储:使用链表来存储字符串,每个结点可以存放一个或多个字符。

我们这里主要讨论最主流的顺序存储。

C语言中的字符串(字符数组):

// 定义一个字符数组来存储字符串 "Hello"
// 方式一:手动添加结束符
char str[10] = {
   
   'H', 'e', 'l', 'l', 'o', '\0'}; 
// 方式二:字符串字面量,编译器会自动在末尾添加 '\0'
char str2[] = "Hello"; 

// 注意:'\0' 是字符串的结束标志,是C语言中判断字符串结尾的关键。

Java/Python中的字符串:
在Java和Python等高级语言中,字符串是一个内置的类(String),其底层通常也是基于字符数组实现,但为开发者封装了丰富的操作,并且具有不可变性(Immutable) 的特性。这意味着任何对字符串的修改操作,实际上都是创建了一个新的字符串对象。

// Java示例
String s1 = "Hello";
String s2 = s1 + " World!"; // 这里s1并没有被修改,而是创建了一个新的String对象给s2

1.2 字符串匹配

字符串匹配应用场景非常广泛,比如:文本编辑器的查找功能(Ctrl+F)搜索引擎防病毒软件文件扫描等,这些场景的核心:如何在一个较长的“主串”中,高效地定位一个“模式串”? 这就是我们今天要说的重点模式匹配问题。

定义:

  • 主串 (S):被搜索的长字符串。
  • 模式串 §:需要寻找的短字符串。
  • 模式匹配:在主串S中查找与模式串P完全相同的子串,并返回其起始位置的过程。

二、 朴素的模式匹配算法

当我们遇到“在一段文字中找一个词”的问题时,脑海中浮现的最直接的方法是什么?没错,就是逐字对比

2.1 算法思想

朴素模式匹配算法(Brute-Force Algorithm)的思想非常简单直接,我们先看一个原理图:
在这里插入图片描述

下面用一张流程图来清洗地展示这个过程:

检查位置
字符比较
最终检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuantumLeap丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值