本帖最后由 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 |