假设我有一个按字母顺序排列的字符串,基于字母重复的次数
有3个B,所以它们在开头,2个A和2个D,所以A在D之前,因为它们是按字母顺序排列的,1个C。另一个例子是CCCCAABBDDAB
注意,在中间某个地方有4个字母(即ccCC),因为可能有2对2个字母。
但是,假设我一行只能有n个字母。例如,如果在第二个示例中n=3,那么我必须从4个C的第一个子串中省略一个“C”,因为一行中最多只能有3个相同的字母
另一个例子是字符串“CCCDDDAABC”;如果n=2,我必须删除一个C和一个D才能得到字符串CCDDAABC
输入/输出示例:
如何使用Python实现这一点?提前谢谢
这就是我现在拥有的,尽管我不确定它是否在正确的轨道上。这里,z是字符串的长度
for k in range(z+1):
if final_string[k] == final_string[k+1] == final_string[k+2] == final_string[k+3]:
final_string = final_string.translate({ord(final_string[k]): None})
return final_string
看起来有点原始,但我认为它是有效的,这就是我在旅途中想到的,希望它能有所帮助:D
以下是我的解决方案:
使用
n
的各种值调用函数会得到以下输出:编辑
这是我的解决方案的更新版本,它仅在重复字符的组超过
n
时删除字符输出:
好的,基于on your comment,您可以对字符串进行预排序,也可以不按您试图创建的函数对其进行排序。使用^{} 可以更轻松地执行此操作:
在每个组
g
中,它被展开,然后被切片到n
元素(即[:n]
部分),因此一行中每个字母最多n
次。如果同一个字母出现在其他地方,则在对一行中的n
进行计数时,它被视为一个独立的序列编辑:这里有一个较短的版本,对于很长的字符串,它的性能可能会更好。当我们使用} 来创建扁平的字母列表。由于它们都是一个生成器,因此仅在最后一行对其进行求值/展开:
itertools
时,这个函数还使用^{相关问题 更多 >
编程相关推荐