寻找一种快速的方法,当重复出现在彼此旁边时,将重复数限制为最大值2.
例如:jeeeeeeeep => [ ‘JEP’,‘吉普车’]
在python中寻找建议,但很高兴看到任何东西的例子 – 不难切换.
谢谢你的帮助!
编辑:英语连续没有任何(或许多)辅音(同一个字母)吗?让我们限制这一点,以便连续不重复辅音,连续两个元音
编辑2:我很傻(嘿,这个词有两个辅音),只是检查所有字母,限制彼此相邻的重复字母为两个.
最佳答案
这是使用groupby的递归解决方案.我已经把你希望能够重复的字符留给你了(虽然默认只有元音):
from itertools import groupby def find_dub_strs(mystring): grp = groupby(mystring) seq = [(k,len(list(g)) >= 2) for k,g in grp] allowed = ('aeIoUpt') return rec_dubz('',seq,allowed=allowed) def rec_dubz(prev,allowed='aeIoU'): if not seq: return [prev] solutions = rec_dubz(prev + seq[0][0],seq[1:],allowed=allowed) if seq[0][0] in allowed and seq[0][1]: solutions += rec_dubz(prev + seq[0][0] * 2,allowed=allowed) return solutions
@H_404_23@这实际上只是一种启发式修剪深度优先搜索到你可能的单词的“解决方案空间”.启发式是我们一次只允许一次重复,并且只有它是有效的可重复字母.你应该在最后得到2 ** n个单词,其中n是数字乘以你的字符串中重复的“允许”字符.
>>> find_dub_strs('jeeeeeep') ['jep','jeep'] >>> find_dub_strs('jeeeeeeppp') ['jep','jepp','jeep','jeepp'] >>> find_dub_strs('jeeeeeeppphhhht') ['jepht','jeppht','jeepht','jeeppht']
@H_404_23@