字符串搜索算法

✍ dations ◷ 2025-12-03 08:15:54 #字符串匹配算法

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

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

相关

  • 费利克斯·霍夫曼费利克斯·霍夫曼(Felix Hoffmann,1868年1月21日-1946年2月8日)是一位德国化学家,是他首先将海洛因和阿司匹林合成成为药物。1868年1月21日霍夫曼生于路德维希堡,在慕尼黑学习化学
  • 辛努塞尔特一世辛努塞尔特一世 Senusret I(希腊人称他为塞索斯特利斯一世 Sesostris I;另一埃及名为森沃斯勒 Senwosret,意为“沃斯雷特女神的子民”)古埃及第十二王朝法老(约公元前1970年—约
  • 时间序列分析时间序列(英语:time series)是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为离散时间数
  • 华山艺文特区华山1914文化创意产业园区(又名华山1914文创园区或华山1914,英语:Huashan 1914 Creative Park),园区前身为“台北酒厂”,为台湾台北市市定古迹。在1999年后,成为提供给艺文界、非营
  • span class=nowrapIrsub3/subO(NOsub3/sub)sub&十硝酸一氧三铱是一种无机化合物,化学式为Ir3O(NO3)10,由红外光谱得其结构为+NO3−。它可由无水三溴化铱和五氧化二氮反应得到。它极易潮解,水解产生二氧化铱。IrCl3 · IrF4
  • 部落客博主(英语:Blogger)一般是指经营博客(英语:Blog)的人。在台湾只要于痞客邦 PIXNET、随意窝 Xuite、Blogger(service)...等免费BSP博客平台注册账户,或使用WordPress系统自架网站,就
  • 单极神经元假单极神经元(pseudounipolar neuron,pseudo表示假(false),uni表示“单”(one))是周围神经系统中的一个感觉神经元。这种神经元包含一个长的树突和一个连接到脊髓的短的轴突。该
  • 百威捷克布杰约维采(捷克语:České Budějovice,捷克语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode"
  • 分裂性人格障礙分裂性人格障礙是一种较为常见的人格障碍,全球约有3%人口会出现这种障碍,但当中只有极少数人会发展成精神分裂等精神病。分裂性人格障礙共有9项常见特征,包括:
  • 嵌齿象属嵌齿象属(学名:),又名三棱齿象或四偏齿象,是一属已灭绝的长鼻目,生存于中新世早期至上新世早期的欧洲(包括法国、德国及奥地利)、北美洲(美国堪萨斯州)、亚洲(巴基斯坦)及非洲(肯雅)。嵌齿