林老师 · 客观题题库 · CSP-S 学习卷 L19 · 字符串算法

CSP-S 学习卷 L19 · 字符串算法

提高级字符串 · KMP 匹配与 next 数组 / 字符串哈希 / Manacher
真题
复刻
试卷编号LEARN-S-19
题目总数100 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 4 大部分,合计 100 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

壹 概念建立 · 字符串匹配问题

25 QUESTIONS · 1 POINT EACH
第 1 题 单选 未作答

在主串(长度 n)中找模式串(长度 m)的朴素匹配,最坏时间复杂度是?

(1 分)
原创复习题 | 考点:朴素匹配的复杂度
第 2 题 单选 未作答

字符串匹配问题:给定主串 S(长 n)和模式串 P(长 m),要在 S 中找?

(1 分)
原创复习题 | 考点:字符串匹配问题的定义
第 3 题 单选 未作答

当 n、m 都达 10⁵ 时,朴素匹配(O(nm))会?

(1 分)
原创复习题 | 考点:为什么需要高效匹配
第 4 题 单选 未作答

字符串匹配的规模

(1 分)
原创复习题 | 考点:字符串匹配的规模
第 5 题 单选 未作答

匹配的语义

(1 分)
原创复习题 | 考点:匹配的语义
第 6 题 单选 未作答

子串 vs 子序列

(1 分)
原创复习题 | 考点:子串 vs 子序列
第 7 题 单选 未作答

模式串与主串

(1 分)
原创复习题 | 考点:模式串与主串
第 8 题 单选 未作答

匹配位置的个数

(1 分)
原创复习题 | 考点:匹配位置的个数
第 9 题 单选 未作答

暴力匹配的剪枝

(1 分)
原创复习题 | 考点:暴力匹配的剪枝
第 10 题 单选 未作答

KMP 优化的核心

(1 分)
原创复习题 | 考点:KMP 优化的核心
第 11 题 单选 未作答

next 数组的长度

(1 分)
原创复习题 | 考点:next 数组的长度
第 12 题 单选 未作答

前缀函数的用途

(1 分)
原创复习题 | 考点:前缀函数的用途
第 13 题 单选 未作答

匹配的判定输出

(1 分)
原创复习题 | 考点:匹配的判定输出
第 14 题 单选 未作答

KMP 处理的问题类型

(1 分)
原创复习题 | 考点:KMP 处理的问题类型
第 15 题 单选 未作答

暴力 vs KMP 对比

(1 分)
原创复习题 | 考点:暴力 vs KMP 对比
第 16 题 单选 未作答

匹配的最坏输入

(1 分)
原创复习题 | 考点:匹配的最坏输入
第 17 题 单选 未作答

string 下标约定

(1 分)
原创复习题 | 考点:string 下标约定
第 18 题 单选 未作答

字符串比较

(1 分)
原创复习题 | 考点:字符串比较
第 19 题 单选 未作答

字符串拼接

(1 分)
原创复习题 | 考点:字符串拼接
第 20 题 单选 未作答

find 函数

(1 分)
原创复习题 | 考点:find 函数
第 21 题 单选 未作答

substr 函数

(1 分)
原创复习题 | 考点:substr 函数
第 22 题 单选 未作答

reverse 与回文

(1 分)
原创复习题 | 考点:reverse 与回文
第 23 题 单选 未作答

toupper/tolower

(1 分)
原创复习题 | 考点:toupper/tolower
第 24 题 单选 未作答

getline 读取

(1 分)
原创复习题 | 考点:getline 读取
第 25 题 单选 未作答

string 与 char 数组

(1 分)
原创复习题 | 考点:string 与 char 数组

贰 模板与代码 · KMP 的 next 数组

25 QUESTIONS · 1 POINT EACH
第 26 题 单选 未作答

字符串 abacaba 的一个「真前缀」是?

(1 分)
原创复习题 | 考点:前缀与后缀
第 27 题 单选 未作答

KMP 中模式串 P=abacaba 的 next 数组(next[i] = P[0..i] 最长相等前后缀长度,下标从 0 起)是?

(1 分)
原创复习题 | 考点:next 数组定义(真题 2025 考法)
第 28 题 单选 未作答

KMP 匹配过程中,主串指针 i 匹配到 P[j] 失配(S[i]≠P[j])时,应执行?

(1 分)
原创复习题 | 考点:next 数组的用途:失配跳转
第 29 题 单选 未作答

KMP 匹配的总时间复杂度是?

(1 分)
原创复习题 | 考点:KMP 的时间复杂度
第 30 题 单选 未作答

KMP 的 next 数组构造函数:

01void build_next(const string& p, int next[]) {
02    next[0] = 0;
03    int j = 0;
04    for (int i = 1; i < (int)p.size(); i++) {
05        while (j > 0 && p[i] != p[j]) j = next[j - 1];
06        if (p[i] == p[j]) j++;
07        next[i] = j;
08    }
09}

对模式串 P = abab,函数结束后 next 数组是?

(1 分)
原创复习题 | 考点:模板代码:build_next 函数追踪(1)
第 31 题 单选 未作答

仍看 build_next 代码。P = abacab,当 i=5 时(p[5]=b,j 此时为 2,p[2]=a),p[i]≠p[j],while 回退后 j 变为?

(1 分)
原创复习题 | 考点:模板代码:build_next 失配回退追踪
第 32 题 单选 未作答

KMP 匹配函数:

01int kmp(const string& s, const string& p, int next[]) {
02    int n = s.size(), m = p.size();
03    int j = 0, cnt = 0;
04    for (int i = 0; i < n; i++) {
05        while (j > 0 && s[i] != p[j]) j = next[j - 1];
06        if (s[i] == p[j]) j++;
07        if (j == m) { cnt++; j = next[j - 1]; }
08    }
09    return cnt;
10}

主串 S = ababab、模式 P = aba(next = {0,0,1}),函数返回的匹配次数是?

(1 分)
原创复习题 | 考点:模板代码:KMP 匹配函数追踪
第 33 题 单选 未作答

字符串哈希代码:

01unsigned long long h[105], pw[105];
02void init_hash(const string& s, int B) {
03    pw[0] = 1;
04    for (int i = 0; i < (int)s.size(); i++) {
05        pw[i + 1] = pw[i] * B;
06        h[i + 1] = h[i] * B + s[i];
07    }
08}

s = ab(ASCII a=97, b=98)、B = 3,运行后 h[2] 的值是?

(1 分)
原创复习题 | 考点:模板代码:字符串哈希 init_hash 追踪
第 34 题 单选 未作答

接上题 init_hash 后,子串哈希查询:

01unsigned long long get_hash(int l, int r) {  // 求 s[l..r] 的哈希
02    return h[r + 1] - h[l] * pw[r - l + 1];
03}

s = abc(ASCII a=97,b=98,c=99)、B = 3(h:h[1]=97, h[2]=389, h[3]=389×3+99=1266),get_hash(1, 2)(即 bc)的值是?

(1 分)
原创复习题 | 考点:模板代码:get_hash 子串查询追踪
第 35 题 单选 未作答

Manacher 求最长回文子串长度:

01int manacher(string s) {
02    string t = "#";
03    for (char c : s) { t += c; t += '#'; }
04    vector<int> d(t.size());
05    int l = 0, r = -1, ans = 0;
06    for (int i = 0; i < (int)t.size(); i++) {
07        int k = (i > r) ? 1 : min(d[l + r - i], r - i + 1);
08        while (i - k >= 0 && i + k < (int)t.size() && t[i - k] == t[i + k]) k++;
09        d[i] = k;
10        if (i + k - 1 > r) { l = i - k + 1; r = i + k - 1; }
11        ans = max(ans, d[i] - 1);
12    }
13    return ans;
14}

对 s = aba,函数返回的最长回文子串长度是?

(1 分)
原创复习题 | 考点:模板代码:Manacher 追踪
第 36 题 单选 未作答

构造 next 数组的核心逻辑:设 next[i] 已知,用变量 j 表示当前最长相等前后缀长度,当 P[i] 与 P[j] 不等时,j 应?

(1 分)
原创复习题 | 考点:next 数组的构造(手写补全)
第 37 题 单选 未作答

对 P = aabaaac 运行 build_next(next[0]=0,失配回退 next[j-1]),next 数组是?

// 上一题 build_next 同款

(1 分)
原创复习题 | 考点:模板代码:build_next 完整
第 38 题 单选 未作答

P = aabaaab 中 build_next 构造,当 i=6(P[6]=b)时若 P[6]≠P[j](j=2 处是 b?),j 的完整回退链是?

(1 分)
原创复习题 | 考点:模板代码:失配多级回退
第 39 题 单选 未作答

KMP 匹配到 j==m(完整匹配)后,j 更新为 next[j-1],这样做的目的是?

(1 分)
原创复习题 | 考点:模板代码:next 与匹配联动
第 40 题 单选 未作答

字符串哈希用 int 手写取模(mod=1e9+7)相比 ull 自然溢出,需要额外注意?

(1 分)
原创复习题 | 考点:模板代码:哈希取模写法
第 41 题 单选 未作答

双哈希(两个 base 或两个 mod)的作用是?

(1 分)
原创复习题 | 考点:模板代码:双哈希
第 42 题 单选 未作答

用哈希判「两个长度为 k 的子串是否相同」,步骤是?

(1 分)
原创复习题 | 考点:模板代码:字符串哈希找重复子串
第 43 题 单选 未作答

字符串哈希做匹配(比较每个窗口哈希)与 KMP 相比?

(1 分)
原创复习题 | 考点:模板代码:哈希匹配与 KMP 对比
第 44 题 单选 未作答

Manacher 里 d[i] 表示 t(含 # 的串)中以 i 为中心的回文半径(含中心字符数)。原串回文长度 = d[i]-1 是因为?

(1 分)
原创复习题 | 考点:模板代码:Manacher 半径含义
第 45 题 单选 未作答

Manacher 中 l、r 记录当前最右回文的左右边界,其作用是?

(1 分)
原创复习题 | 考点:模板代码:Manacher 边界
第 46 题 单选 未作答

Manacher 处理长 n 的串,时间复杂度是?

(1 分)
原创复习题 | 考点:模板代码:Manacher 复杂度
第 47 题 单选 未作答

KMP 统计所有匹配位置,当 j==m 时除了 cnt++ 还应?

(1 分)
原创复习题 | 考点:模板代码:KMP 匹配位置输出
第 48 题 单选 未作答

字符串哈希 mod 通常取大素数(如 1e9+7)而非 1e5,原因是?

(1 分)
原创复习题 | 考点:模板代码:哈希与 mod 选取
第 49 题 单选 未作答

用 int 取模哈希求子串时,若 base 与 mod 互素,除法(h[r]-h[l]*B^len)为什么不需要逆元?

(1 分)
原创复习题 | 考点:模板代码:字符串哈希与逆元
第 50 题 单选 未作答

处理 10⁵ 级文本中找 10 个模式串的首次出现,简单可靠的做法?

(1 分)
原创复习题 | 考点:模板代码:KMP 与字符串哈希选型

叁 应用与变体 · 字符串哈希与 Manacher

25 QUESTIONS · 1 POINT EACH
第 51 题 单选 未作答

字符串哈希的核心思想是?

(1 分)
原创复习题 | 考点:字符串哈希的思想
第 52 题 单选 未作答

预处理前缀哈希 h[i](s[0..i-1] 的哈希)后,求子串 s[l..r] 的哈希(base=B)的公式是?

(1 分)
原创复习题 | 考点:子串哈希的 O(1) 查询
第 53 题 单选 未作答

字符串哈希最适合解决哪类问题?

(1 分)
原创复习题 | 考点:字符串哈希的应用场景
第 54 题 单选 未作答

Manacher 算法能在 O(n) 内求出?

(1 分)
原创复习题 | 考点:Manacher 解决的问题
第 55 题 单选 未作答

朴素枚举所有回文子串是 O(n²)(枚举中心+向两边扩),Manacher 优化到 O(n) 靠的是?

(1 分)
原创复习题 | 考点:Manacher 相对朴素回文的优势
第 56 题 单选 未作答

统计长度 k 的不同子串个数,用哈希的做法?

(1 分)
原创复习题 | 考点:应用:字符串哈希统计不同子串
第 57 题 单选 未作答

用哈希快速判断 s[l1..] 与 s[l2..] 从开头能匹配多长,常用?

(1 分)
原创复习题 | 考点:应用:最长公共前缀哈希
第 58 题 单选 未作答

字符串哈希中,两个子串哈希相等(用同 base 同 mod)就判定相等,风险是?

(1 分)
原创复习题 | 考点:应用:哈希判断子串相等
第 59 题 单选 未作答

KMP 中,n-next[n-1] 能表示字符串的最小循环节长度的条件是?

(1 分)
原创复习题 | 考点:应用:KMP 求循环节
第 60 题 单选 未作答

主串长 n、模式长 m,KMP 统计出现次数的时间是?

(1 分)
原创复习题 | 考点:应用:KMP 统计子串出现
第 61 题 单选 未作答

Manacher 对 s=abccba 求出的最长回文子串长度是?

(1 分)
原创复习题 | 考点:应用:Manacher 求最长回文子
第 62 题 单选 未作答

求所有回文子串个数,Manacher 能做的依据是?

(1 分)
原创复习题 | 考点:应用:回文中心个数
第 63 题 单选 未作答

按字典序排序 n 个字符串,用 string 的 < 直接 sort,复杂度?

(1 分)
原创复习题 | 考点:应用:字符串哈希与排序
第 64 题 单选 未作答

求字符串循环同构的最小字典序(最小表示法)的复杂度是?

(1 分)
原创复习题 | 考点:应用:字符串的最小表示
第 65 题 单选 未作答

大量字符串(总长 10⁶)快速排序,可用哈希优化的思路是?

(1 分)
原创复习题 | 考点:应用:字符串排序的哈希优化
第 66 题 单选 未作答

数据 10⁶、模式串固定、需匹配 10⁶ 次,每次用 KMP 重跑?

(1 分)
原创复习题 | 考点:应用:字符串哈希与模式匹配选型
第 67 题 单选 未作答

为什么竞赛中字符串哈希「偶发碰撞」可接受?

(1 分)
原创复习题 | 考点:应用:哈希碰撞的极端情形
第 68 题 单选 未作答

字符串 s 的最小周期(前缀重复)与 next 的关系,正确的是?

(1 分)
原创复习题 | 考点:应用:KMP 与周期
第 69 题 单选 未作答

判断子串 s[l..r] 是否回文,用哈希的技巧是?

(1 分)
原创复习题 | 考点:应用:字符串哈希求回文
第 70 题 单选 未作答

Manacher 给 s 插入 # 的目的?

(1 分)
原创复习题 | 考点:应用:Manacher 预处理
第 71 题 单选 未作答

「求最长公共子串」可用哈希+二分,做法是?

(1 分)
原创复习题 | 考点:应用:字符串哈希与二分答案
第 72 题 单选 未作答

模式串含通配符(如 a?b),用 KMP 直接匹配?

(1 分)
原创复习题 | 考点:应用:KMP 与字符串哈希的选择
第 73 题 单选 未作答

字符串哈希中「滑动窗口」求下一窗口哈希的递推是?

(1 分)
原创复习题 | 考点:应用:字符串哈希与滑动窗口哈希
第 74 题 单选 未作答

字符串哈希 base 取 131/13331 而不用 2 或 10,原因是?

(1 分)
原创复习题 | 考点:应用:字符串哈希的 base 选择
第 75 题 单选 未作答

AC 自动机(多模式 KMP)适合?

(1 分)
原创复习题 | 考点:应用:多模式匹配规模

肆 易错与综合

25 QUESTIONS · 1 POINT EACH
第 76 题 单选 未作答

KMP 的 next[i] 与「模式串前 i 个字符的最长公共前后缀」的关系,下列说法正确的是?

(1 分)
原创复习题 | 考点:易错:next 数组是前缀函数
第 77 题 单选 未作答

两个不同字符串可能得到相同哈希值,这叫做?

(1 分)
原创复习题 | 考点:易错:哈希碰撞
第 78 题 单选 未作答

用字符串哈希实现「在主串 S 中找模式串 P」,正确的做法是?

(1 分)
原创复习题 | 考点:综合:字符串哈希与模式匹配
第 79 题 单选 未作答

CSP-S 中 KMP 与朴素匹配的选择,正确的是?

(1 分)
原创复习题 | 考点:易错:KMP 在竞赛中的地位
第 80 题 单选 未作答

不同教材 next 数组下标起始不同,做题时必须?

(1 分)
原创复习题 | 考点:易错:next 的边界定义
第 81 题 单选 未作答

string s 中 s[i] 的类型是?

(1 分)
原创复习题 | 考点:易错:字符串与字符
第 82 题 单选 未作答

空字符串(长度 0)在匹配/哈希中,以下说法正确的是?

(1 分)
原创复习题 | 考点:易错:空串
第 83 题 单选 未作答

模式串中含 '.'(普通字符,非通配)时 KMP 直接匹配?

(1 分)
原创复习题 | 考点:易错:KMP 与模式含特殊字符
第 84 题 单选 未作答

两段子串哈希比较时 base 幂次不一致,结果?

(1 分)
原创复习题 | 考点:易错:哈希值比较用错 base
第 85 题 单选 未作答

int 哈希不取模直接乘加会?

(1 分)
原创复习题 | 考点:易错:哈希溢出误判
第 86 题 单选 未作答

Manacher 扩展 while 里条件 i-k>=0 && i+k<t.size() 防止?

(1 分)
原创复习题 | 考点:易错:Manacher 数组越界
第 87 题 单选 未作答

KMP 处理多个不同模式串的最优做法?

(1 分)
原创复习题 | 考点:易错:KMP 与多模式
第 88 题 单选 未作答

string 的 < 是字典序,与「长度优先」的区别?

(1 分)
原创复习题 | 考点:易错:字符串比较的字典序
第 89 题 单选 未作答

string::find 找不到返回的值是?

(1 分)
原创复习题 | 考点:易错:find 返回值类型
第 90 题 单选 未作答

s.substr(pos, len) 当 pos+len 超过长度时?

(1 分)
原创复习题 | 考点:易错:substr 越界
第 91 题 单选 未作答

字符串哈希 base 取负数?

(1 分)
原创复习题 | 考点:易错:哈希与负数 base
第 92 题 单选 未作答

「next 数组」和「最小循环节」的关系,正确说法?

(1 分)
原创复习题 | 考点:易错:KMP next 与循环节混淆
第 93 题 单选 未作答

Manacher 处理后 t 的长度是 2n+1,d 数组长度?

(1 分)
原创复习题 | 考点:易错:Manacher 与字符串长度
第 94 题 单选 未作答

比较长度不同的两个子串哈希?

(1 分)
原创复习题 | 考点:易错:哈希与字符串长度差
第 95 题 单选 未作答

匹配时区分大小写?

(1 分)
原创复习题 | 考点:易错:KMP 与输入大小写
第 96 题 单选 未作答

base 取 0 会?

(1 分)
原创复习题 | 考点:易错:字符串哈希与 base=0
第 97 题 单选 未作答

Manacher 求出的最长回文子串长度类型?

(1 分)
原创复习题 | 考点:易错:Manacher 答案类型
第 98 题 单选 未作答

字符串匹配数据 10⁶ 时,朴素 O(nm) 会?

(1 分)
原创复习题 | 考点:易错:字符串题的数据范围
第 99 题 单选 未作答

取模后哈希出现负值?

(1 分)
原创复习题 | 考点:易错:哈希与 mod 负数
第 100 题 单选 未作答

C++ 的 string 存中文(UTF-8)时 s[i]?

(1 分)
原创复习题 | 考点:易错:字符串比较中文