字符串科技
你说的对,但字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s="a1a2···an"(n>=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。
字符串匹配
你说的对,但字符串匹配是计算机科学中最古老、研究最广泛的问题之一。一个字符串是一个定义在有限字母表∑上的字符序列。例如,ATCTAGAGA是字母表∑ = {A,C,G,T}上的一个字符串。字符串匹配问题就是在一个大的字符串T中搜索某个字符串P的所有出现位置。其中,T称为文本,P称为模式,T和P都定义在同一个字母表∑上。
一些定义:
字符串匹配:又称模式匹配(pattern matching)。该问题可以概括为「给定字符串
暴力做法:从主串
时间复杂度:
实际上暴力算法在随机数据下表现良好——匹配成功的字符数量越多,匹配的概率越低。
但卡到
KMP 算法
主要思想:充分利用匹配失败的信息,跳过某些已经判断为匹配失败的位置。
如果字符串
border 的性质:
如果当前已经成功匹配了
于是将
有点抽象,举个栗子:
S ABABABC
T ABABC
算出
next 0 0 1 2 0
第一次匹配失败:
S ABAB.ABC
T ABAB.C
next 0 0 1 2 0
将
S ABABABC
T ABABC
next 0 0 1 2 0
匹配成功。
这样做是
于是问题就在于如何快速求出
暴力求显然不现实,考虑线性递推。
已知
令
如果
发现计算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现