在一个字符串上做操作:将连续重复字符消除。允许反复迭代操作。问:设计一个算法,通过合理安排消除次序,得到一个长度最短的结果串(结果可能不唯一,找到一个即可)。
如:
abbccd -> ad
abbcbbabbcbb -> acac
abcddcbe -> ae
abbbbccccbd -> ad
abccbbd -> ad
abbccaabbc -> a / c
求指教这个问题有什么好的解法不?
想到的一个方法是对重复子串作标记,然后“传染标记”,比如
原始串: abbbbccccbd
压缩: abcbd
标记向量: 01100
从0位开始,向后检测遇到的1,如果1和自身字符相同,或者第一个0和自身字符相同,配对都标记1
第一轮: 01110(1位向后找第一个0(3位),和自身相同,都染为1,其中1位已经是1了)
第二轮: 结束
还原: ad(把依然为0的输出)
但是这个方法对最后一个case无效:
压缩: abcabc
标记: 011110
第一轮: 111110(0位的a找到了后面标记为1的a)
第二轮: 111111(2位的c找到了后面第一个标记0的是c)
一定保证正确的方法显然是穷举,对所有重复子串选择消或暂时不消,在生成的字符串空间中搜索,但是复杂度太高了。。。
--
FROM 123.58.117.*