字符串搜索算法

✍ dations ◷ 2025-12-09 17:32:02 #字符串匹配算法

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

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

相关

  • 玉米玉米(学名:Zea mays)是一年生禾本科草本植物,是全世界总产量最高的重要粮食作物。同时也可以当作饲料使用,还有在生物科技产业作为乙醇燃料的原材料。而且玉米更在各个化工领域被
  • 卡沙夏卡沙夏(葡萄牙语:Cachaça),又译卡沙萨,或称巴西甘蔗酒,是以甘蔗汁为原料酿造的蒸馏酒,产于巴西,号称为巴西国酒。可调制多款鸡尾酒,如卡碧尼亚(Caipirinha)、香蕉巴迪达(Banana Batida)
  • 孙之獬孙之獬(约1591年-1647年7月23日),字龙拂,山东淄川县(今淄博市博山区白塔镇大庄村)人,明末清初官员,同进士出身。孙之獬是明清鼎革之际一位充满争议的人物。明崇祯初年,身在翰苑的孙之
  • 非洲裔美国人非裔美国人 42,020,743其他美国黑人列表(英语:Afro-American peoples of the Americas) 美洲裔利比里亚人 · 塞拉利昂克里奥尔人 Black Nova Scotians(英语:Black Nova Scotia
  • 大使特命全权大使,简称大使,是一国元首向驻在国元首派遣的等级最高的外交代表,在驻在国有代表本国国家元首和政府向驻在国表达意见或者同驻在国达成协议的全权,享有完全的外交特权和
  • 松巴哇岛松巴哇岛(印尼语:Pulau Sumbawa)是印度尼西亚的一个岛。经纬度为:南8°47,东118°5′,她属于西努沙登加拉省(West Nusa Tenggara),全岛面积15,448平方公里,人口一百五十万。这个岛处在
  • DCT离散余弦变换(英语:discrete cosine transform, DCT)是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶
  • 尼诺伊·阿基诺国际机场尼诺伊·阿基诺国际机场(菲律宾语:Paliparang Pandaigdig ng Ninoy Aquino,英語:Ninoy Aquino International Airport,IATA代码:MNL;ICAO代码:RPLL)是菲律宾最主要的国际机场,服务马尼
  • 浙江沿海诸河浙江河流列表,列举全部或部分在浙江省境内的河流,并依照流域排列;支流则由河口至源头排序。浙江东濒大海,河流源短,多独流入海,其中较大的独流入海的河流为钱塘江、瓯江、飞云江、
  • 杞县杞县,古称雍丘,在中国河南省中部偏东,是开封市下辖的一个县。总面积1243平方千米,总人口为105万人。下辖:金城街道、五里河镇、付集镇、于镇镇、高阳镇、葛岗镇、阳固镇、邢口镇