开发者社区> 问答> 正文

查找包含k个唯一字母的最大可能的子字符串。(递归)

我试图找到最大的子字符串可能与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

展开
收起
kun坤 2019-12-27 17:46:11 338 0
1 条回答
写回答
取消 提交回答
  • 你可以使用递归生成器:

    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'
    
    2019-12-27 17:46:17
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载