字符串搜索算法

✍ dations ◷ 2025-11-23 06:51: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,所以另有更快速的算法。

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

相关

  • 内分泌人体内部有维持恒定现象的功能,因此有赖于内分泌系统和神经系统来共同运作。内分泌系统(Endocrine)是负责调控动物体内各种生理功能正常运作的两大控制系统之一,由分泌激素(荷尔
  • 真值表真值表是使用于逻辑中(特别是在连结逻辑代数、布尔函数和命题逻辑上)的一类数学用表,用来计算逻辑表示式在每种论证(即每种逻辑变数取值的组合)上的值。尤其是,真值表可以用来判断
  • 角秒؋ ​₳ ​ ฿ ​₿ ​ ₵ ​¢ ​₡ ​₢(英语:Brazilian cruzeiro) ​ $ ​₫ ​₯ ​֏ ​ ₠ ​€ ​ ƒ(英语:Florin sign) ​₣ ​ ₲ ​ ₴(英语:Hryvnia sign) ​ ₭ ​ ₺
  • 拿破仑拿破仑·波拿巴(法语:Napoléon Bonaparte;意大利语:Napoleone Buonaparte;1769年8月15日-1821年5月5日),法国军事家、政治家与法学家,在法国大革命末期和法国大革命战争中达到权力巅
  • 布兰卡港布兰卡港(西班牙语:Bahía Blanca)是位于阿根廷布宜诺斯艾利斯省东南部大西洋沿岸的一座港口城市。城市名称意为“白色海湾”。
  • 初岛坐标:35°2′23.41″N 139°10′14.47″E / 35.0398361°N 139.1706861°E / 35.0398361; 139.1706861初岛是位于日本伊豆半岛东方相模滩里的一座小岛,行政上隶属于静冈县热海
  • VC-37A Long Range VIP Aircraft湾流G550和G500(英语:Gulfstream G550)是由湾流航太公司制造的双发动商务喷射机,是继承湾流V型(英语:Gulfstream V)商务喷射机市场定位的后继机种。截至2016年1月,已有450架湾流G550
  • 黄平县黄平县是中华人民共和国贵州省黔东南苗族侗族自治州下属的一个县。面积1668平方公里,2002年人口33万。苗族为主,通用苗语黔东方言。邮政编码556100,县政府驻新州镇。黄平县下辖
  • 伐昔洛韦伐昔洛韦(Valaciclovir)是鸟嘌呤类似物类抗病毒药物,用于单纯疱疹和带状疱疹感染。它是阿昔洛韦的前药,在体内可转化为阿昔洛韦。伐昔洛韦是一种前药,是阿昔洛韦酯化物,口服生物利
  • 角 (动物)角是某些动物头上坚硬的突起物,或是类似外观的部位。原本、生物学上的角(英语:horn、德语:Horn)指的是一部分的奇蹄目和偶蹄目哺乳动物头上突起的、由角质层或骨骼形成的部位,通常