【字符串中连续重复次数最多的子串】

s = 'aabcbcbcdddbcbcbcbc'
def maximum_count(s,length,dic):
  #搜索s中长为length的子串,将有连续重复的子串加入dic中,key为重复的字符串。val为重复的次数
  #在重复的子串“bc“断掉连续性后,重新计数
  #len=2
  n = len(s)
  
  for i in range(0,n-length+1):
    comparestr = s[i:i+length]
   
    start = i+length
    end = i+2*length
    count = 1
    while end <= n and s[start:end] == comparestr: #end is not inclusive, so can be n
      count +=1
      start +=length
      end +=length
    
    if count>1:
      
      if comparestr not in dic:
        dic[comparestr] = count
      else:
        if count>dic[comparestr]:
          dic[comparestr] = count
  #print(dic)


def maximum(s):
  #找出所有长度里的情况,按题目要求先找次数最多的,次数相同找长度最大的。次数长度都相同按字母排序
  dic = {}
  n = len(s)
  for length in range(1,n+1):
    maximum_count(s,length,dic)
  print(dic)
maximum(s)
      
s = 'aabcbcbcdddbcbcbcbc'
dic output:
{'a': 2, 'd': 3, 'bc': 4, 'cb': 3, 'bcbc': 2}

算法:搜索s中长为length的子串,将有连续重复的子串加入dic中,key为重复的字符串。val为重复的次数. 重复的子串,如“bc“断掉连续性后,重新计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值