字符串搜索算法

✍ dations ◷ 2025-11-26 23:48:06 #字符串匹配算法

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

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

相关

  • 门冬胰岛素门冬胰岛素(英语:Insulin aspart),由诺和诺德生产,药物商品名诺和锐(英语:NovoRapid),胰岛素类似物,用于治疗糖尿病。无色澄明液体。患者用药,反应不良,主要视乎剂量,与胰岛素药理学作用
  • 断层扫描断层扫描(英语:Tomography),也称断层成像,是指通过任何可穿透的波,对物体进行分段成像的方法。该技术被应用在了影像诊断学、考古学、生物学、大气科学、地球物理学、海洋学、等离
  • 前东部领土德国前东部领土(德语:ehemalige deutsche Ostgebiete)或德意志帝国东部领土(德语:Ostgebiete des Deutschen Reiches)是指位于奥得河-尼斯河线以东,曾经得到国际公认属于德国领土一
  • 汉斯·克里斯蒂安·安徒生汉斯·克里斯汀·安徒生(丹麦语:Hans Christian Andersen,1805年4月2日-1875年8月4日),通称安徒生,丹麦作家暨诗人,因为其童话作品而闻名于世,童话中带出含义,哲学家。其笔下著名的童
  • 1100年四月乙酉(5月23日)——宋钦宗赵桓。(卒年1156年?)
  • 波宁顿理查·帕克斯·波宁顿 (1802年10月25日-1828年9月23日)是英国浪漫主义画派的风景画家,是当时英国最有影响力的画家。波宁顿出生于诺丁汉郊区的阿诺德镇,他的父亲曾经担任过狱卒,还
  • 马哈奇卡拉马哈奇卡拉(俄语:Махачкала́',俄语拉丁字母拼写:Makhachkala,阿瓦尔语:МахIачхъала)是俄罗斯达吉斯坦共和国的首府,东临里海。2002年人口462,412人。2010年人口
  • 希尔格罗夫希尔格罗夫(英语:Hillgrove)是位于美国加利福尼亚州洛杉矶县的一个非建制地区。该地的面积和人口皆未知。希尔格罗夫的座标为34°01′01″N 117°58′48″W / 34.01694°N 117.
  • 罗马尼亚国家图书馆罗马尼亚国家图书馆(罗马尼亚语:Biblioteca Naţională a României)是罗马尼亚的国家图书馆,收藏所有者罗马尼亚出版的书籍。在罗马尼亚共产主义时期,罗马尼亚国家图书馆曾名为
  • 虾虎鱼科虾虎鱼即指鱼类分类学虾虎鱼目中的虾虎鱼科(Gobiidae),又作�虎科。它是鱼类中最大的科之一,已知品种超过2000种。绝大多数体型细小,一般短于10厘米。世界上最短小的脊椎动物之一微