花了一些时间在这个网站上,我开始享受尽可能短的事情。这可能就是为什么我最近被包含多个相同字符的字符串冒犯的原因。您的工作是编写根据以下规则压缩给定字符串的函数或程序:
从0压缩开始,即寻找相同字符的第一对(最左边),中间还有0个其他字符。如果找到了这样的一对,请删除两个字符之一,然后通过执行另一个0压缩来重新启动算法。如果找不到这样的对,请继续下一步。示例:
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
然后执行1压缩,即寻找第一对相同的字符,它们之间还有1个其他字符。如果找到了这样的一对,请删除其中的一个以及它们之间的所有字符,然后以0缩进重新开始。如果找不到这样的对,请继续下一步。示例:
abacac
-C1->acac
java
-C1->ja
继续进行2-缩合,依此类推,直到n缩合,其中n为原始字符串的长度,每次在缩合除去一些字母后重新启动。示例:
programing
-C2->praming
abcdafg
-C3->afg
生成的字符串称为压缩字符串,每个字符串最多包含一次。
输入:
可打印的ascii字符的小写字符串。
输出:
所述冷凝根据上述规则的字符串。
例子:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
详细示例以阐明算法的工作原理:
fnabnfun -C0-> fnabnfun -C1-> fnabnfun -C2-> fnfun -C0-> fnfun -C1-> fun -C0-> fun
-C1-> fun -C2-> ... -C8-> fun
abcbaccbabcb -C0-> abcbacbabcb -C0-> abcbacbabcb -C1-> abacbabcb -C0-> abacbabcb
-C1-> acbabcb -C0-> acbabcb -C1-> acbcb -C0-> acbcb -C1-> acb -C0-> acb
-C1-> ... -C12-> acb
只要您的解决方案和算法为所有允许的输入返回相同的输出,您的方法就不必从上面实现算法。这是一个代码高尔夫挑战。
感谢@Linus提供有用的沙箱评论!