问题出自这里
问题描述:
Given a string consisting of a,b and c's, we can perform the following operation: Take any two adjacent distinct characters and replace it with the third character. For example, if 'a' and 'c' are adjacent, they can replaced with 'b'. What is the smallest string which can result by applying this operation repeatedly?
For example, you can either get cab -> cc or cab -> bb, resulting in a string of length 2.
For the second case, one optimal solution is: bcab -> aab -> ac -> b. No more operations can be applied and the resultant string has length 1.
我用中文简单重述一下,也就是说字符串中任意两个相邻的不同字符都可以替换为第三种字符,问你一个字符串被多次替换后可以剩下的最短长度为多少.
解答:
这个问题的答案让人拍手称快. 分为三种情况:
首先,如果字符串中字符全部一样,那么直接返回该字符串的长度即可.
其次,如果三种字符的个数都是奇数或者都是偶数,那么答案为2
其他情况,返回1.
解答简单的让你意想不到吧,大家可以试试验证一下答案.
正确性证明:(数学归纳法),N表示字符串的长度
首先,N=3的时候.如果字符都相同,返回3;如果都不同返回2,其他情况返回1.
其次,当N>3的时候,如果字符串中字符不是全部相同的话,我们可以利用替换法则获得长度为N-1的串,且该串也不是由相同字符组成的
还有一个规律,那就是字符个数全为奇数的串经过转换就变成字符个数全为偶数的串,反之亦然。
哦哦,于是乎,我们迭代就可以得到上述结论啦。
附上英文原版:
Use math induction:
1. if you have case of length 3
if all the same then 3
if all different then 1 (i.e. odd counts)
other cases 2
2. Lemma: If string of length N > 3 consist of non same char it always can be reduced to the length N - 1. (prove is simple)
3. Lemma: If string is N > 3 and consist of non same char during reduction to N-1 it may be represented as a string of non the same chars (reader can prove it too as it's not too hard)
4. Lemma: during reduction from N to N-1 (N > 3) if number of chars been all odd then it will become even and reverse. This is super easy to prove.
Now if you take all this lemmas you can easy to see a logic why it works. First you can always reduce a chain of non same chars up to the string with 3 chars, secondary during reduction you'll end up with odd count if you start count have been even or odd.