解题思路
将问题抽象为:给定一个长度为 m 的字符串 pat,其中每个字符可能是小写字母或 ?。要求将每个 ? 替换为小写字母,使得最终序列中任意相邻两个字符不相同。求总方案数对 109+7 取模的结果。
采用动态规划,逐位处理。由于字符集只有 26 个小写字母,可以维护一个长度为 26 的数组 f[c],表示当前处理到的前缀中,以字符 c(c=0,1,…,25)结尾的合法方案数。
- 初始化第 0 位:
- 若 pat[0]=?,则所有 26 个字符均可选,f[c]=1。
- 若 pat[0] 是固定字符 c0,则仅 f[c0]=1,其余为 0。