hihoCoder229——Same Letters In A Row

很久没有做hihocoder了,之前刷leetcode,其实工作找完了不知道刷这些有什么用,可能训练下代码的写法吧,双指针的就写得略烂,将就看看吧,有设置几个earlyStoping,这样可能时间优化一些。思路是hiho网站的discuss的分析,就不详细介绍了。

num = int(input().strip())
letter = list(input().strip())

tot = [0]*27 # 所有的数量
cnt = [0] * 27  # 在i-j中的数量

for a in letter:
    tot[ord(a)-ord('a')] += 1

max_len = 0

i = 0
j = 0
cnt[ord(letter[0]) - ord('a')] = 1
for i in range(len(letter)):
    if i!=0:
        cnt[ord(letter[i-1]) - ord('a')] -= 1

    while(j<len(letter)):
        while min(cnt)>=num and j<len(letter):
            max_len = max(max_len, j-i+1)
            j+=1
            cnt[ord(letter[j]) - ord('a')] += 1
        if max(tot) < j-i+1:
            break

        for k in range(27):
            if tot[k] >= j - i + 1 and (j - i + 1 - cnt[k]) <= num:
                max_len = max(max_len, j - i + 1)

        if j==len(letter)-1:
            break
        else:
            j+=1
            cnt[ord(letter[j]) - ord('a')] += 1

print(max_len)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值