字符串搜索算法

✍ dations ◷ 2025-11-19 18:14:29 #字符串匹配算法

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

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

相关

  • 心律不齐心脏节律不整(拉丁语:Cardiac Arrhythmia/Cardiac Dysrhythmia; 法语:Rythme cardiaque irrégulier;英语:Irregular Heartbeat,通称:心律不正、心律失常、心律失常、心律不齐),是指心
  • 麻醉科医师人体解剖学 - 人体生理学 组织学 - 胚胎学 人体寄生虫学 - 免疫学 病理学 - 病理生理学 细胞学 - 营养学 流行病学 - 药理学 - 毒理学麻醉科医师(英语:Anesthesiologist)是指
  • 梁赞州梁赞州(俄语:Рязанская область,罗马化:Ryazanskaya oblast)是俄罗斯联邦主体之一,属中央联邦管区。面积39,600平方公里,人口1,227,910(2002年)。首府梁赞,在俄罗斯首
  • 渔场渔场(英语:fishing ground)是鱼类、贝类等水生动物丰富的水域。世界大型渔场通常分布在大陆架宽阔且有寒流和暖流汇合的地方,日本渔场、纽芬兰渔场和北海渔场是世界三大渔场。秘
  • 战斗战斗(combat)是以武力企图支配对方的方法。战斗通常指个体与个体或小群体与小群体之间之冲突,规模大一些称为战役,再大一些称为战争。
  • 林地复育林地复育或称迹地造林、人工造林、再造林等,通常是指森林或林地经人为砍伐殆尽之后,透过自然或人为的方式,使其再次成林的过程。林地复育的自然方式为天然下种、萌芽更新及萌蘗
  • 大明湖坐标:36°40′41″N 117°01′53″E / 36.677929°N 117.031302°E / 36.677929; 117.031302大明湖在山东省省会济南旧城北部,现在的市区中心,为济南三大名胜之一,另外两处名胜
  • 林秀林秀(1669年-?),福建漳州府漳浦县(今福建省漳浦县)人,清朝军事将领。行伍出身,任福建金门镇标右营游击。康熙五十年,任福建澎湖水师协标右营游击,随同提督施世骠为右先锋,出兵台湾。康熙
  • 赎罪日战争以色列埃及  叙利亚  伊拉克 约旦  沙特阿拉伯  利比亚  突尼斯  阿尔及利亚  摩洛哥  古巴阿拉伯-以色列战争(1948年–1949年) – 苏伊士运河危机(1956年)
  • 过度社会化过度社会化是以现今社会学普遍以与人群进行积极接触行为为正面价值的反思。过度社会化认为人太积极为社会服务或认同社会意见,名义上虽然是为合群,但在某种程度上却是为掌控社