🔴 一字之差:子串 vs 子序列

一个字符串 abcbdcba(8 个字符)。回文就是正着读和倒着读一样。同一个字符串,左边输出最长回文子串的长度,右边输出最长回文子序列的长度: S = "abcbdcba" def longest_pal_subst

开始练习 →

自己写:中心扩展

一个字符串 abcbdcba(8 个字符)。回文就是正着读和倒着读一样。c 从 0 数到 2n-2,偶数的 c 落在字符上,奇数的 c 落在缝里。补全往外扩的那两步。

开始练习 →

🔴 只试字符位,偶数长度的回文全丢了

拿另一个字符串 abccba 做对照——它整个就是一个回文,而且长度是偶数。把只试字符位的那一版写出来,和正确版一起输出。

开始练习 →

⚠️ 两种做法,同一段回文,代价不同

一个字符串 abcbdcba(8 个字符)。回文就是正着读和倒着读一样。暴力枚举所有子串、和中心扩展,两种做法各试了多少次?结果对得上吗?

开始练习 →

⚠️ 把「子串」和「子序列」一起交出来

一个字符串 abcbdcba(8 个字符)。回文就是正着读和倒着读一样。两个函数都写好了:一个求最长回文子串(中心扩展),一个求最长回文子序列(区间 DP,就是 l1_algo_10 里写过的那个)。把两个长度一起输出。

开始练习 →

一个模式要在很多段文本里反复找,选哪个

模式固定不变,文本一段接一段地来。最划算的是【0】。

开始练习 →

⚠️ 一次要找几十个词,选哪个

一段文本,要同时找出几十个关键词出现在哪儿。该用【0】。

开始练习 →

⚠️ 模式越长,暴力涨多少

同一段文本(24 个 a),模式分别是 4、6、8 个 a。数一数暴力各比了多少次: T24 = "a" * 24 def brute_cmp(t, p): c = 0 for i in range(l

开始练习 →

🔴 同样三种情况,KMP 一动不动

同一段文本、同样是 4、6、8 个 a 的模式,这次数 KMP 的比较次数: T24 = "a" * 24 def brute_cmp(t, p): c = 0 for i in range(len(t

开始练习 →

自己写:把选型写成一个函数

三种场景:①一个模式、文本不断来;②几十个词、一段文本;③一个模式、只找一次。按顺序输出各自该用什么。

开始练习 →