连续字符串长度

"""
给定一个字符串,只包含大写,求在包含同一个字母的子串中,求长度第k长的子串的长度,相同的字母只取最长的那个长度
ABC 
1
1

AABBHHHCCCHHHHH
1
4
"""
  	s = input().strip()
    k = int(input().strip())
    
    #统计相同字母子串长度
    count = 1
    strDict = {}
    n = len(s)
    if n != 1:
        #遍历到倒数第二个
        for i in range(n-1):
            # 相同字符
            if s[i] == s[i+1]:
                # 每次count+1后都是统计到了i+1,因为count从1开始的,可以统计相同字符的最后一个
                count += 1
            
            else:
                # 下个字符与当前字符不同两种情况:1,下个字符是新的字符,2,下个字符之前统计过
                # 字典的get方法,可以处理这两个情况,如果之前出现过,返回统计的值,如果没出现过则为0,与当前的count取最大
                strDict[s[i]] = max(strDict.get(s[i],0),count)
                #新的字符又从1开始,这个时候一定是有下一个的
                count = 1
            
            # 处理最后一个字符    
            if i == n - 2:
                # 如果最后一个字符不同,则count = 1;如果相同,则count不为1,然后都可以判断是否之前出现过,如果出项过,返回的值至少是1
                strDict[s[i+1]] = max(strDict.get(s[i+1],0),count)
    
        ans = sorted(strDict.items(),key=lambda x:x[1])
        if k > len(ans):
            print(-1)
        else:
            print(ans[-k][1])
    else:
        if k == 1:
            print(1)
        else:
            print(-1)
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值