字符串搜索算法

✍ dations ◷ 2025-12-02 19:00:04 #字符串匹配算法

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

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

相关

  • 陶罐炖煮陶罐炖煮(英语:Jugging或法语:Civet)是一种把整只动物在紧密盖好的容器(例如:陶罐、陶壶、砂锅等)内炖煮一段长时间的煮食方法。这种煮食方法主要是用于处理打猎时的猎物或鱼,经处理
  • 广义相对论入门广义相对论是一种关于引力的理论,它在1907年到1915年由爱因斯坦完成。根据广义相对论,物质之间的引力来自于时空的弯曲。在广义相对论出现之前的200多年间,牛顿万有引力定律被
  • 王维王维(692年-761年),字摩诘,号摩诘居士,祖籍山西祁县,其父迁居于蒲州(今山西永济市),遂为河东人。盛唐山水田园派诗人、画家,号称“诗佛”。今存诗400余首,重要诗作有《相思》、《山居秋
  • 晶格晶体结构是指晶体的周期性结构。固体材料可以分为晶体、准晶体和非晶体三大类,其中,晶体内部原子的排列具有周期性,外部具有规则外形,比如钻石(图)。Hauy最早提出晶体的规则外型是
  • 西部区郊区西部区郊区是西非国家塞拉利昂的14个行政区之一,由西部区负责管辖,首府设于瓦特洛,面积544平方公里,2004年识字率为52%,2004年人口164,024。
  • 国际规度化之比值凝血酶原时间(prothrombin time),简称PT,是一套检测外在凝血路径的方法。由于目前检测的标准是依照国际标准化比值(international normalized ratio,简称INR),因此该检测又称为“Pro
  • 林蜥属林蜥属(学名:Hylonomus)是种最早期的爬行动物,它们生存于3亿1200万年前的石炭纪晚期。到2006年为止,它们是目前所能确认最早的爬行动物;西洛仙蜥(Westlothiana)更为古老,但应为两栖类
  • 布莱恩·爱普斯坦布莱恩·塞缪尔·爱普斯坦(英语:Brian Samuel Epstein,1934年9月19日-1967年8月27日),生于英国利物浦,犹太人,英国音乐界巨擘,披头士乐队星探及经纪人。生平最伟大的作品莫过于披头士
  • 亚齐王朝亚齐苏丹国(Sultanate of Aceh)是16至17世纪在今天印尼苏门答腊亚齐的强权,首都哥打拉贾(Kutaraja,今日之班达亚齐)。亚齐人的族源为占族,在占城被越南灭亡后部分占族逃离到东南亚
  • 淮夷淮夷,可能是存在于中国上古时代的夏至东周时期,生活在中国东部的黄淮、江淮一带的东夷部族统称。根据《竹书纪年》记载,夏朝的相在即位的第一年,进攻淮夷,第二年攻风夷、黄夷,第七