字符串搜索算法

✍ dations ◷ 2025-12-03 18:22:57 #字符串匹配算法

字符串搜索算法(String searching algorithms)又称字符串比对算法(string matching algorithms)是一种搜索算法,是字符串算法中的一类,用以试图在一长字符串或文章中,找出其是否包含某一个或多个字符串,以及其位置。

最直观的解法是比对,如下例中,在字符串haystack中找出字符串needle

char* haystack;char* needle;int hlen, nlen, found;int i,j,k;found = 0;hlen = strlen(haystack);nlen = strlen(needle);for (i = 0; i < hlen; ++i) {    for (j = 0; j < nlen; ++j) {        if (haystack != needle) break;        if (j == nlen - 1) found = 1;    };};return found;

上例中,若字符串needle存在于字符串haystack中,则传回1,否则传回0。

但是此直观算法的复杂度为 O(mn),其中haystack的长度为n、needle的长度为m,所以另有更快速的算法。

令 为模式的长度, 为要搜索的字符串长度, 为字母表长度。

相关

  • 系统药理学系统药理学(Systems pharmacology)系将系统生物学知识应用到药理学中而产生的一门学科。该学科旨在阐明药物如何作用于肌体的各系统。和用一种特殊的蛋白质-药物反应来评价一
  • 分子生物学中心法则分子生物学的中心法则(英语:The central dogma of molecular biology,又译分子生物学的中心教条),首先由佛朗西斯·克里克于1958年提出,并于1970年在《自然》上的一篇文章中重申:中
  • 朗布依埃城堡朗布依埃城堡(法语:Château de Rambouillet) 是法国法兰西岛大区城市朗布依埃的一座法式城堡,位于巴黎东南50公里处。朗布依埃城堡是法国总统的别邸之一。
  • 萨卡拉萨卡拉(阿拉伯语:سقارة‎;英语:Saqqara)是埃及境内一个古代大型墓地,位于开罗以南约30公里,面积约7公里乘1.5公里。该地现时仍屹立着最古老金字塔——阶梯金字塔,该金字塔在前2
  • 茨温格宫茨温格宫(Der Dresdner Zwinger)位于德国城市德累斯顿,是德国的一个主要地标。茨温格宫所在的位置曾经是有外墙保护的德累斯顿堡垒的一部分,茨温格这个名称在德文中意为同心城堡
  • 巨颅兽属吴氏巨颅兽(学名:Hadrocodium wui)被看作是最早的、目前已知的哺乳动物。这个动物的头颅只有12毫米长,生活在侏罗纪早期。其化石早在1985年就已经在中国禄丰出土。但是由于其头
  • 矩阵力学矢量 · 矢量空间  · 行列式  · 矩阵标量 · 矢量 · 矢量空间 · 矢量投影 · 外积 · 内积 · 数量积 · 向量积矩阵 · 行列式 · 线性方程组 · 秩 · 核 · 迹
  • 超中性子超中性子(英语:Neutralino),又译中性微子,是一种由超对称所预测的假想粒子。超中性子是费米子,且电荷为零,共有四种,最轻的超中性子一般是稳定的。它们的典型标记为
  • 布伦特福德坐标:51°29′10″N 0°18′36″W / 51.486°N 0.310°W / 51.486; -0.310宾福特(英语:Brentford)是英国伦敦西部的一个市镇,是豪士罗区的成员,是宾特河与泰晤士河的合流地,于查宁
  • 2019冠状病毒病印度尼西亚疫情3月3月4月4月过去15日过去15日2019冠状病毒病印度尼西亚疫情,介绍在2019新型冠状病毒疫情中,在印度尼西亚发生的情况。截至24日,目前共有新增确诊个案107例,累积确诊病例升至686