|
发表于 2020-4-23 10:53:04
|
显示全部楼层
本帖最后由 xiangjianshinan 于 2020-4-26 14:12 编辑
- '''
- 今天的题目:
- 找到给定字符串(由小写字符组成)中的最长子串 t ,要求 t 中的每一字符出现次数都不少于 k 。返回 t 的长度。
- 示例 1:
- 输入:s = "aaabb", k = 3
- 输出:3
- 解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。
- 示例 2:
- 输入:s = "ababbc", k = 2
- 输出:5
- 解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。
- 解题思路:
- 1、解题意得,需要截取s字符串中的一段连续的子串t。而子串t中的每一个字符出现次数不能少于k次.
- 2、想到的办法是通过集合来提取s字符串中的每个不重复的元素。
- 3、计算每个元素的数量,当数量大于等于k时,提取该元素。
- 4、通过提取的元素进行re模块的操作。
- 过程如下:
- '''
- import re
- s = "aaabb"
- k = 3
- def timu382(s,k):
- if len(s)==0:
- return '没有匹配的信息。' #当S为空时出错的修改20200424 14:58
- seta = set(s) # 1、2
- research = '['
- researcha = ''
- for i in seta:
- if s.count(i) >= k:
- researcha = researcha + i
- if researcha.strip() == '': #s = "weitong" k = 2 处理s字符不符合k条件的情况20200426 0822
- return '没有匹配的信息。'
- research = research + researcha +']{' + str(k) + ",}"
- print("research",research)
- temps = re.search(research, s).group()
- if temps == None:
- return '没有匹配的信息。'
- else:
- print(temps)
- for i in researcha: #输入 s = 'ababacb', k = 3 结果有误 20200426 14:09
- if temps.count(i)<k:
- return '没有匹配的信息。'
- return len(temps)
- print(timu382(s,k))
- print(timu382("ababbc",2))
- s = "weitong"
- k = 2
- print(timu382(s,k))
- s = 'ababacb'
- k = 3
- print(timu382(s,k))
- print('done!')
复制代码
楼主:回复的
当 s 为空字符串时出错
已修改~~~
=======================================
修改 当s = "weitong" k = 2 时,不能处理的情况。20200426 0822
大佬辛苦啦!!!
=======================================
#输入 s = 'ababacb', k = 3 结果有误 20200426 14:09 |
评分
-
查看全部评分
|