我试图找到最大的子字符串可能与k唯一的字母。有没有一种方法可以通过字符串分区来递归呢? 我的想法是通过切割最后的字符来分割一个字符串,如果我找到包含k个唯一字母的第一个子字符串,我就返回它。
For example k = 2, string = "abccd"
abccd ->
abcc, bccd ->
abc,bcc,bcc,ccd -> return bcc
def unique_l(sub, k):
u=0
visited = set()
for ch in sub:
if ch not in visited:
visited.add(ch)
u += 1
if u < k:
return -1
elif u == k:
return 1
else:
return 0
def find_sub(string,k):
if unique_l(string,k) == 1:
return string
if unique_l(string,k) == -1:
return "Not Found"
find_sub(string[0:len(string)-1],k) # Left
find_sub(string[1:len(string)],k) # Right
我知道我可以用迭代在O(n)时间内完成,但是有没有递归的方法呢? 问题来源StackOverflow 地址:/questions/59381711/find-the-largest-possible-substring-with-k-unique-letters-recursive
你可以使用递归生成器:
from collections import Counter
def group(d, k):
for i in range(len(d)):
for b in range(i, len(d)):
if len(set((_r:=d[i:b]))) == k:
yield _r
yield from group(_r, k)
r = max(group("abccd", 2), key=len)
输出:
'bcc'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。