字符串搜索算法

✍ dations ◷ 2025-11-27 21:58:09 #字符串匹配算法

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

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

相关

  • 丰塔纳丰塔纳 (马耳他语:Il-Fontana)是马耳他戈佐岛上的一个村庄,2014年3月时人口为985人。丰塔纳源于维多利亚的城郊区,临近Rabat-Xlendi路。它在当地被称为"It-Triq tal-Għajn",即“
  • 根本原因分析根本原因分析(RCA,Root cause analysis),旨在找到问题的根本原因,是分析问题、解决问题的一种“治本”的方式。透过调查和分析问题哪里出错、为什么出错,寻求防止差错事故再次发生
  • 诉诸权威诉诸权威(英语:Appeal to authority;拉丁语:Argumentum ad verecundiam)或称伪托权威、援假权威,是一种特殊类型的归纳论证谬误,通常以统计三段论(英语:statistical syllogism)的形式
  • 中国酷刑史酷刑是野蛮社会的陋习之一。在中国历史上,酷刑种类繁多,包含有斩、杀、车裂、凌迟、枭首、宫刑、幽闭、剥皮、铁铉油炸、老虎凳、站铁笼等。《尚书·虞书·皋陶谟》云“无教逸
  • 叛舰喋血记《叛舰喋血记》(英语:Mutiny on the Bounty)是一部1935年上映的美国电影,由弗兰克·洛伊德执导,改编自查尔斯·诺德霍夫(英语:Charles Nordhoff)和詹姆斯·诺曼·霍尔(英语:James Norm
  • 叶状体叶状体是包括藻类、真菌及一些苔纲、地衣和黏菌亚纲有机体未分化的营养组织。这些生物原先统称叶状体植物。叶状体通常是一个多细胞的不移动的有机体的整体。 尽管叶状体植
  • 苏轼苏轼(1037年1月8日-1101年8月24日),眉州眉山(今四川省眉山市)人,北宋时著名的文学家、政治家、艺术家、医学家。字子瞻,一字和仲,号东坡居士、铁冠道人。嘉佑二年进士,累官至端明殿学
  • 五角锥五角锥是指底面为五边形的锥体五角锥可以透过底面的性质进行分类。其中,底面为正五边形的五角锥称为正五角锥,特别地,若侧面也是正多边形,即正三角形,则属于约翰逊多面体;若底面为
  • 林同棪林同炎(英语:Tung-yen Lin 或 T. Y. Lin,1912年11月14日-2003年11月15日),原名林同棪,美籍华裔结构工程师。林同炎出生于福建省福州,是家中第4个小孩(共有11个),后来在北京成长。他的父
  • 南澳乡南澳乡,为台湾宜兰县下辖的一个乡,位于宜兰县最南端,北邻三星乡,东北接苏澳镇,东南滨太平洋,南邻花莲县秀林乡,西南邻台中市和平区,西与西北毗大同乡,是宜兰县面积最大、人口最少、人