字符串搜索算法

✍ dations ◷ 2025-11-29 00:44:20 #字符串匹配算法

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

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

相关

  • 陶片放逐制陶片放逐制(希腊文:ὄστρακον;英文:Ostracism),又译陶片流放制、陶片放逐法、陶片流放法或贝壳流放法等,是古代雅典城邦的一项政治制度,由雅典政治家克里斯提尼于前510年创立
  • 1896年雅典奥运会第一届夏季奥林匹克运动会(英语:the Games of the I Olympiad;法语:les Jeux de la Ière olympiade;希腊语:οι Αγώνες της 1ης Ολυμπιάδας,Therinoí Olym
  • .cat.cat(加泰罗尼亚语:Català的缩写,加泰罗尼亚语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Co
  • 麦金农罗德里克·麦金农(英语:Roderick MacKinnon,1956年2月19日-),美国洛克菲勒大学分子神经生物学和生物物理学教授。因对细胞膜中的离子通道功能的物理化学属性的研究,尤其是X射线晶体
  • 毛豆毛豆,即未成熟且呈青绿色,作为蔬菜食用的大豆,即全株的鲜荚80%达饱满时,此时豆荚呈绿色带有茸毛,故名为“毛豆”,又称“菜用大豆”,日本称为“枝豆”,英文名有“vegetable soybean、
  • 洪武洪武(1368年-1399年)是明太祖朱元璋在位期间的年号,也是明朝的第一个年号。洪武年间全国没有战乱,社会迅速从元末的战乱中恢复,人口迅速增加,经济快速发展,史称洪武之治。明太祖朱元
  • 楚科奇-br /堪察加语系楚科奇-堪察加语系,又名罗拉维特兰语系(Luorawetlan),是古西伯利亚语言的其中一种,通行于东北西伯利亚。虽然古西伯利亚语言本身的成员未必有关连,但楚科奇-堪察加语族之内的语言
  • 霍元甲霍元甲(1868年1月18日-1910年9月14日),字俊卿,清末武术家。祖籍河北省沧州市东光县安乐屯,生于直隶省静海县小南河村(今属天津市西青区南河镇,为纪念霍元甲,自2009年1月18日起更名为
  • 亚瓦派亚瓦派县(英语:Yavapai County)是美国亚利桑那州中部的一个县。面积21,051平方公里。根据美国2000年人口普查,人口167,517。亚瓦派县的县治为蒲莱斯考特。亚瓦派县成立于1864年1
  • 序列组装序列组装(Sequence assembly)是生物资讯学中的一种分析方法。此方法通过序列比对和序列合并等演算,将短片段的DNA建构成为较长的连续序列。此技术的创立,是因为被测序的核酸分子