解题思路
核心思路
要找最短的小写串 T,使得 T 不是 S 的子序列。若 S 里缺了某一种字母,则长度为 1 即可。若 26 种字母都出现过,任意长度为 1 的串都是子序列,答案至少为 2,并可以继续往下推。
从左到右扫描 S,用集合记录当前这一层已经见过的不同字母。每凑齐 26 种,就说明任意一个字符都能在这一层里被匹配掉,于是层数加一并清空集合。扫完后的层数加 1 就是答案。
正确性可以两边夹:设凑齐了 k 层。任意长度不超过 k 的串,第 i 个字符都可以在第 i 层里匹配,因而都是子序列。另一方面,记第 i 层最后补齐 26 种的那个字符为 ci,最后一层之后的后缀里缺的某个字母为 x,则 c1c2⋯ckx 无法按顺序匹配,故存在长度为 k+1 的非子序列。