<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>String on Anawaert Blog</title>
    <link>https://blog.anawaert.com/tags/string/</link>
    <description>Recent content in String on Anawaert Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sat, 08 Aug 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.anawaert.com/tags/string/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>快速手算 KMP 算法中模式串的对应数组</title>
      <link>https://blog.anawaert.com/post/algorithm/calculate-array-of-kmp-pattern-matching-efficiently/</link>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.anawaert.com/post/algorithm/calculate-array-of-kmp-pattern-matching-efficiently/</guid>
      <description>快速手算 KMP 算法中模式串的对应数组 概述 在数据结构与算法中，字符串的匹配一定是绕不开的一个话题。除了简单直观的暴力匹配外，字符串的模式匹配更是重点 —— 以 KMP 为代表的模式匹配算法可以将匹配时间复杂度从 $ O(mn) $ 缩短至 $ O(m+n) $，其中 $ m $ 与 $ n $ 分别是模式串与待匹配字符串的数据规模。本文将从应试计算的角度出发，用较短的篇幅与各位分享如何快速计算 KMP 算法中模式串的 next[] 数组与改进后的 nextval[] 数组。由于串的匹配是数据结构课程的必修内容，因此笔者将假定您已经初步了解什么是串的模式匹配，并且清楚为什么要使用 KMP 算法以及 next[] 与 nextval[] 数组的含义，笔者接下来只会简单地介绍一下 next[] 与 nextval[] 数组。&#xA;快速手算 next[] 数组 next[] 数组中的每个元素用于指示当模式串与主字符串（简称主串）在当前位置发生失配的时候，模式串“指针”接下来应当指向哪一个位置来重新进行匹配。如下面的表格所示，模式串 &amp;quot;bcbc&amp;quot; 的 next[] 数组中各个元素分别为 0、1、1 与 2，比如当模式串中的第二个 &#39;b&#39; 与主串中的某一位失配以后，模式串的“指针”将回到 1 位置，也就是对应第一个 b。请注意，笔者在此处使用了从 1 开始的下标，这将与一部分数据结构课本以及计算机学科专业基础综合考试大纲中使用的规则相同，并非机算或代码实现中的下标规则。&#xA;位置 1 2 3 4 5 6 7 主串 a b a b c b c 模式串 b c b c next[] 0 1 1 2 那么如何快速手算 next[] 数组呢？可以拆成这两个部分：</description>
    </item>
    
    
  </channel>
</rss>