字符串搜索算法

✍ dations ◷ 2025-11-26 04:22:12 #字符串匹配算法

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

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

相关

  • 水母水母(Jellyfish,又名白鲊、.mw-parser-output ruby>rt,.mw-parser-output ruby>rtc{font-feature-settings:"ruby"1}.mw-parser-output ruby.large{font-size:250%}.mw-parser
  • 火星3.693 m/s² (0.37795.32% 二氧化碳 2.7% 氮气 1.6% 氩 0.13% 氧气 0.08% 一氧化碳 210 ppm 水蒸气 100 ppm 一氧化氮 2.5 ppm 氖 300 ppb 氪 130 ppb 甲醛 80 ppb 氙 30 p
  • 火炉炉是一种提供燃料燃烧的容器,多以陶土烧制,亦有以木、石、金属制成,有瓮形、盆形,亦有四方形。使用方法为在底部铺上灰,其上置放燃料(如煤炭),燃烧燃料时可用来取暖或加热物体,属早
  • 弗里德里希·奥古斯特·凯库勒弗里德里希·奥古斯特·凯库勒·冯·斯特拉多尼茨(德语:Friedrich August Kekulé von Stradonitz,1829年9月7日-1896年7月13日),德国有机化学家。从1850年代直到他去世,凯库勒是欧
  • 拉美西斯三世拉美西斯三世(Ramesses III,公元前1219年—约公元前1155年4月)是古埃及第二十王朝第二位法老,在位32年。其木乃伊已被发现,现藏开罗博物馆。拉美西斯三世改编军队,使用外族雇佣兵,
  • 爱德华·冯·柏姆-厄尔默利男爵爱德华·冯·柏姆-厄尔默利男爵(Eduard Freiherr von Böhm-Ermolli) (1856年2月12日 - 1941年12月9日) 第一次世界大战时意大利出生的奥地利军官,奥匈帝国中的一名陆军元帅
  • 拉丁帝国拉丁帝国(1204–1261,拉丁语直译为罗马尼亚帝国),是1204年十字军第四次东征时,攻陷拜占庭帝国的首都君士坦丁堡后建立的国家。鲍德温一世为开国君主。十字军想在拜占庭帝国领土上
  • 西米德兰兹西米德兰兹郡(英语:West Midlands),英国英格兰西米德兰兹区域的郡,范围像举起拇指的拳头向右卧。1974年前原属沃里克郡、伍斯特郡、斯塔福德郡范围。以人口计算,伯明翰是第1大城市
  • 菲律宾比索菲律宾比索(菲律宾语:Piso,ISO 4217货币编码:PHP)是菲律宾的法定货币,1菲律宾比索相等于100 centavos(菲律宾语:sentimo)。菲律宾是世界上其中一个曾被西班牙殖民统治而使用比索作为
  • 胆钙化醇胆钙化醇(英语:Cholecalciferol,又称为维生素D3或胆钙化固醇)是维生素D的一种,胆固醇脱氢后生成的7-脱氢胆固醇经紫外线照射即可形成胆钙化醇,因此也就是说胆钙化醇的维生素D原是7