字符串搜索算法

✍ dations ◷ 2025-08-13 03:20: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,所以另有更快速的算法。

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

相关

  • 卡洛·乌尔巴尼卡洛·乌尔巴尼(意大利语:Carlo Urbani,1956年10月19日-2003年3月29日),又译乌尔班尼或厄巴尼,意大利医生,是首位留意到SARS是一种全新传染病的医生。乌尔巴尼是无国界医生意大利分
  • 哈勃超深空哈勃超深空(英文:Hubble Ultra Deep Field,HUDF)是一张外太空照片,显示的是天炉座的一小部分。该照片由哈勃空间望远镜于2003年9月24日至2004年1月16日期间得到的数据累积而成的,
  • 有机反应有机反应即涉及有机化合物的化学反应,是有机合成的基础。几种基本反应类型为:加成反应、消除反应、取代反应、周环反应、重排反应和氧化还原反应。在有机合成当中,有机反应被广
  • 西晋西晋(266年2月4日-316年12月11日),是中国古代魏晋南北朝时期的一个大一统的王朝,乃于265年由晋武帝司马炎取代曹魏政权而建立。晋武帝凭借父祖余荫和世族支持而得位。国号为“晋
  • 磺酸磺酸是含有磺酸基-SO2OH(-S(=O)(=O)-OH)的一类有机化合物。一般它们的酸性比相应羧酸强,可与蛋白质和碳水化合物紧密结合。在很多反应中用作催化剂和反应中间体。磺酸基与氢相
  • 郑经克台郑经嗣位之争,又称郑经克台或郑经靖难,是台湾明郑王朝的历史事件。公元1662年(永历十六年)5月至11月,首代延平王郑成功病薨后,郑成功之子郑经与郑成功之弟郑袭为了争夺王位,展开长
  • 鹅卵石鹅卵石(Cobblestone),基本上是cobble(英语:Cobble (geology))大小的石头,是用于路面(英语:Road surface)、街道和建筑物的一种天然的建筑材料。Template:Road types
  • NEMA美国电气制造商协会(National Electrical Manufacturers Association),简称NEMA,是美国电气设备及医学影像制造商组成的协会,在1926年创立,总部在华盛顿附近的维吉尼亚州罗斯林(英
  • 法兰克法兰克王国(拉丁语:Regnum Francorum;法语:royaume des Francs;意为“法兰克人的王国”)是5世纪至9世纪在西欧和中欧的一个王国,其疆域与罗马帝国在西欧的疆域基本相同。法兰克王国
  • 寄螨总目见内文寄螨总目(Parasitiformes),是蛛形纲蜱螨亚纲下的一个分类元。本总目包含了所有蜱螨类的生物。这个总目的生物大多数都是寄生生物,但并非所有均是。举例说:总目内约五千种属