解题思路
一次操作可以删掉当前串中一组互不相邻的字符。若目标是保留某种字母 c,则所有非 c 字符必须被删光;被 c 隔开的每一段连续非 c 字符互相独立,长度为 L 的连续段需要 ⌈log2(L+1)⌉ 次操作才能删完。因此字符串的权值等于:对所有出现过的字母,取其「最长待删段」对应操作次数的最小值。
要让权值恰好为 k,必须存在某字母的最长待删段长度落在 [2k−1,2k−1],且没有任何字母的操作次数更小。由此得到判定:
- 若 n<2k,则 2k−1>n/2,不可能让所有字母的最长待删段都不小于 2k−1,无解,输出
-1。
- 否则令 p=2k−1,构造 n−p 个字符
a 后接 p 个字符 b。保留 a 时待删段长度恰好为 p,操作次数为 k;保留 b 时待删段更长,操作次数不小于 k。故权值恰好为 k。