字符串搜索算法

✍ dations ◷ 2025-10-17 08:15:11 #字符串匹配算法

字符串搜索算法(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,所以另有更快速的算法。

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

相关

  • 鲛齿鲸鲛齿鲸(学名Squalodon),又名原鲛鲸或鲨齿鲸,是一属已灭绝的鲸鱼,属于鲛齿鲸科。鲛齿鲸最初由Grateloup于1840年所命名,并被认为是属于禽龙类的恐龙,但后来被重新分类。鲛齿鲸的学名
  • 费里法费里法(法语:Lois Jules Ferry)是法国在1881年和1882年颁布的2个教育法令,分别确立了免费义务教育原则,以及强制教育(要求所有15岁以下儿童 -- 包括男童和女童 --必须入学)与世俗教
  • 七叶树属七叶树属包括20-25种生长在北半球温带地区的落叶树或灌木。其中有7-10种是原生于北美洲的,有13-15种是原生于欧亚大陆的。七叶树属原来是单独的一个科,后来根据基因判断,和槭树
  • 伯努利丹尼尔·伯努利(Daniel Bernoulli,1700年2月8日-1782年3月17日),生于荷兰格罗宁根,著名数学家,约翰·伯努利之子,为伯努利家族代表人物之一。其伯努利定律适用于沿着一条流线的稳定
  • 纽澳军团级巡防舰安扎克级巡防舰,或者纽澳军团级巡防舰(英语:Anzac-class frigate)是以德国MEKO 200型为基础设计修改,由澳大利亚Tenix防卫系统公司建造的巡防舰。采用模组化设计,舰上设备由新西兰
  • 玄坛真君玄坛真君,全称金龙如意正一龙虎玄坛真君,道教神祇,相传姓赵,名朗,一名昶,字公明,以字行,也有人称其为赵玄坛、赵光明,“玄坛”是指道教的斋坛,有护法神之意,为三十六官将或是四大护法元
  • 欧胡岛瓦胡岛 (夏威夷语:Oʻahu,英语:Oahu,/oʊˈɑːhuː/),又译为欧胡岛,或被称为“聚集之岛”,是夏威夷群岛中面积第三大的岛屿,也是群岛中人口最多的岛屿,聚集了夏威夷州总人口的大约三分
  • 左岸乌克兰左岸乌克兰 (乌克兰语:Лівобережна Україна、俄语:Левобережная Украина、波兰语:Ukraina Lewobrzeżna)是指第聂伯河以东的乌克兰地区。1
  • 双子座5号双子座5号(Gemini V)是双子座计划中的第三次载人飞行任务,也是美国的第十一次太空任务(包括飞行高度超过100千米的X-15任务)。替补成员同样接受任务训练,在主力成员因各种原因无法
  • 巴拉·希萨尔起义 (1979年)阿富汗民主共和国巴拉·希萨尔起义(Bala Hissar uprising)是发生于1979年8月5日的起义,地点是阿富汗喀布尔南部边缘的历史要塞巴拉·希萨尔。叛乱分子以及反叛的阿富汗陆军军官