1194 - 修改字符串


我们考虑如果现有的字符串本身就不相同,我们保持不动,如果出现了一串完全相同的字符串,才进行修改,并且每间隔一个字符才做修改。我们通过思考所有可能的情况,来确定修改的策略。

对于任意一段连续相同的字符,我们设其长度为 len ,并将这段字符分别编号 1 到 len

  • len 为奇数时,我们只需要修改偶数号的字符,改为与连续字符不同的任何字符都可以。并且至少要修改这么多次,才可以达到要求。

  • len 为偶数时,我们需要讨论串两端的字符是否相同:

不同的情况,例如: ABBBBC,此时 B 编号 1 到 4 。我们如果选择将 B 改成 A ,可以修改偶数号的 B ,变为 ABABAC ;如果选择将 B 改成 C ,可以修改奇数号的 B ,变为 ACBCBC 。

相同的情况,例如: ABBBBA ,我们只需要将 B 间隔地改成 C 即可,串变为 ABCBCA或 ACBCBA 。

可知不论这一串 B 的前后字符如何搭配,总能够选出一种修改 len/2个字符的方案,达到最终的要求。

于是我们在遍历过程中统计连续字符的长度,就可以 O(n)求出需要修改多少个字符了。