首先可以举出特殊情况:即输入全是同一字符,这时的最短长度自然就是字符串的长度.
接下来看看可能的取值范围:假设字符串的开头是'a', 'b', 'c'
接下来给出'a',字符串可以转化为'a', 'b', 'b'或'c','c','a'.
接下来给出'b',字符串可以转化为'a', 'b', 'a'或'c','c','b', 或'a','a','b'.
接下来给出'c',字符串可以转化为'a', 'a', 'c'.
总之,新字符串的长度可以保证依然为3,对于"aab","aba","abb"也可以像上面一样转换,即字符串的总可以消除到3的长度(不包括"aaa"这种情形),而3长度的字符串又可以消减到1长度或2长度,即字符串的长度总可以消减到1或2.
现在引入一个特征向量(x, y, z)代表'a','b','c'字符数量的奇偶性.
1.当初状态为(1, 1, 1)即全奇时,任何一种变换都会导致三个数奇偶性同时变化(两个数量减一,一个数量加一),特征向量变为(0,0,0).
2.当初状态为(0, 0, 0)即全偶时,任何一种变换都会导致奇偶性变为(1, 1, 1).
3.当初状态为(x, y, z)(x + y + z == 1)时,任何一种变换都会导致(x, y, z)(x + y + z == 2).
4.当初状态为(x, y, z)(x + y + z == 2)时,任何一种变换都会导致(x, y, z)(x + y + z == 1).
从前文可知对于任意长度的非单一字符串,总可以缩减到3长度
此时若为"abc", 即特征向量为(1, 1, 1),再变换即可得长度为0, 0, 2的一种排列
此时若为"abb",即特征向量为(1, 0, 0), 再变换即可得长度为0, 0 ,1的一种排列.
即当初始字符串中字符的的奇偶性相同时,最短消除长度为2,其他为1.
650

被折叠的 条评论
为什么被折叠?



