字符串搜索算法

✍ dations ◷ 2025-12-02 11:55:40 #字符串匹配算法

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

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

相关

  • 前列腺增生良性前列腺增生症(英语:Benign Prostatic Hyperplasia,缩写BPH),俗称前列腺肥大症或前列腺肥大,以前列腺中叶增生为实质改变而引起的一组综合征,良性前列腺增生症是属于男性常见的
  • 羟基化羟基化(法语:Hydroxylation,也称羟化)是向分子引入羟基(-OH)的过程。常指用羟基取代碳上的氢原子(-H)的反应。产物是醇、酚等。生化中,催化羟化反应的酶称为羟化酶。←氨基酸二级结构→
  • 雅典执政官列表雅典自从公元前1068年废除王政以来,权利转往执政官手中。雅典的第一任执政官是墨冬,他是雅典末代国王科德鲁斯的儿子。由于,科德鲁斯在位时,多利亚人从墨伽拉进犯雅典。德尔斐神
  • 受洗洗礼(英语:Baptism),又称浸礼、圣洗圣事、施洗、受洗和受浸,是一宗教仪式,现普遍指基督教的传统仪式。据《圣经》记载,施洗约翰曾为耶稣施洗,而这亦是耶稣吩咐的。洗礼一词来自通用
  • 熔盐堆熔盐反应堆(英语:molten salt reactor, MSR)是核裂变反应堆的一种,属于第四代反应堆,其主冷却剂(英语:nuclear reactor coolant)以至燃料本身都是熔盐混合物,它可以在高温下工作(可获
  • 足羽龙足羽龙属(属名:Pedopenna)是种小型、有羽毛的手盗龙类恐龙,化石发现于中国的道虎沟化石层。足羽龙可能比始祖鸟还要古老,虽然道虎沟化石层的地质年代仍未确定。有些测量认为该地
  • 柯拉蓉玛莉亚·科拉松·“柯莉”·许寰哥·阿基诺(菲律宾语:Maria Corazon "Cory" Cojuangco Aquino,1933年1月25日-2009年8月1日),亦称科拉松,本名许娜桑,华文媒体通常简称阿基诺夫人,菲律
  • NDS阿富汗国家安全局(NDS,普什图语:د ملي امنیت ریاست‎、达利语: ریاست امنیت ملی,又被称为Amniyat及Amaniyat)是阿富汗政府的情报机构。根据报导,该单位
  • 佛手瓜佛手瓜(学名:Sechium edule)是一种葫芦科佛手瓜属植物,又称合手瓜、合掌瓜、佛手、隼人瓜、拳头瓜、梨瓜等。原产于墨西哥、中美洲和西印度群岛,1915年传入中国,在台湾、中国江南
  • 利穆赞利穆赞大区(法语:Limousin)是法国中部一个已撤消的大区名称。面积16,942km²,人口710,939。下辖科雷兹省、克勒兹省、上维埃纳省。2016年1月1日,利穆赞大区、阿基坦大区、普瓦图-