<p>以下是我的解决方案:</p>
<pre class="lang-py prettyprint-override"><code>def snip_string(string, n):
list_string = list(string)
list_string.sort()
chars = set(string)
for char in chars:
while list_string.count(char) > n:
list_string.remove(char)
return ''.join(list_string)
</code></pre>
<p>使用<code>n</code>的各种值调用函数会得到以下输出:</p>
<pre class="lang-py prettyprint-override"><code>>>> string = "AAAABBBCCCDDD"
>>> snip_string(string, 1)
'ABCD'
>>> snip_string(string, 2)
'AABBCCDD'
>>> snip_string(string, 3)
'AAABBBCCCDDD'
>>>
</code></pre>
<h2>编辑</h2>
<p>这是我的解决方案的更新版本,它仅在重复字符的<em>组</em>超过<code>n</code>时删除字符</p>
<pre class="lang-py prettyprint-override"><code>import itertools
def snip_string(string, n):
groups = [list(g) for k, g in itertools.groupby(string)]
string_list = []
for group in groups:
while len(group) > n:
del group[-1]
string_list.extend(group)
return ''.join(string_list)
</code></pre>
<p>输出:</p>
<pre class="lang-py prettyprint-override"><code>>>> string = "DDDAABBBBCCABCDE"
>>> snip_string(string, 3)
'DDDAABBBCCABCDE'
</code></pre>