给定目标字符串 T 和源字符串 S 。小红只能在 S 的任意位置插入字符,求最少插入多少个字符,才能使 T 成为新字符串的子序列。插入字符必须来自 T 的字符集合。
第一行输入 T ,第二行输入 S 。保证二者只含小写字母,长度均在 [1,2500] 。
输出最少插入字符数。
abc ac
1
abc xyz
3
aaab ab
2
考点:双指针
限制 2 秒 / 256MB | 标准输入输出
推荐方向:双指针
本题切入点
最少插入使 T 成为子序列:双指针扫 T 与 S,能匹配就前进,不能匹配说明缺字符需插入(计数 +1),最后输出插入数。
用两个指针协同移动,把两层循环的 O(n²) 优化到 O(n)。
思路框架(双指针 通法 · 非本题专属)
实现要点:写成 while (l < r) 循环最清晰,切记每轮至少有一个指针移动,否则死循环。
复杂度:时间 O(n)(排序则 O(n log n)) | 空间 O(1)
该范式的通法易错点
样例 1:输入 abc / ac → 输出 1
插入 b 即可。
样例 2:输入 abc / xyz → 输出 3
源串无法匹配目标串中的任何字符。
样例 3:输入 aaab / ab → 输出 2
还需插入两个 a。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-07月15号开发岗。