鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 382

[复制链接]
发表于 2020-4-23 08:53:11 From FishC Mobile | 显示全部楼层
xiangjianshinan 发表于 2020-4-23 08:36
为什么楼主出题后,你们就马上有答案了。而我还理不清思路呢???

差距不是一般的小呀………………

然后就是 @zltzlt 回的一堆「解答错误」,
这点我深有感触
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 10:04:38 | 显示全部楼层
fan1993423 发表于 2020-4-22 22:12
bddcbefb 这种bbb是不是子串

子串和子序列是不同的
子串要求是原字符串中一块连续的字符串
子序列只要求从原字符串中按原顺序取出字符组成的即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 10:53:04 | 显示全部楼层
本帖最后由 xiangjianshinan 于 2020-4-26 14:12 编辑
  1. '''
  2. 今天的题目:
  3. 找到给定字符串(由小写字符组成)中的最长子串 t ,要求 t 中的每一字符出现次数都不少于 k 。返回 t 的长度。
  4. 示例 1:
  5. 输入:s = "aaabb", k = 3
  6. 输出:3
  7. 解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。
  8. 示例 2:
  9. 输入:s = "ababbc", k = 2
  10. 输出:5
  11. 解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。
  12. 解题思路:
  13. 1、解题意得,需要截取s字符串中的一段连续的子串t。而子串t中的每一个字符出现次数不能少于k次.
  14. 2、想到的办法是通过集合来提取s字符串中的每个不重复的元素。
  15. 3、计算每个元素的数量,当数量大于等于k时,提取该元素。
  16. 4、通过提取的元素进行re模块的操作。
  17. 过程如下:
  18. '''
  19. import re

  20. s = "aaabb"
  21. k = 3
  22. def timu382(s,k):
  23.     if len(s)==0:
  24.         return '没有匹配的信息。'     #当S为空时出错的修改20200424 14:58
  25.     seta = set(s)  # 1、2
  26.     research = '['
  27.     researcha = ''
  28.     for i in seta:
  29.         if s.count(i) >= k:
  30.             researcha = researcha + i
  31.     if researcha.strip() == '':       #s = "weitong"   k = 2 处理s字符不符合k条件的情况20200426 0822
  32.         return '没有匹配的信息。'
  33.     research = research + researcha +']{' + str(k) + ",}"
  34.     print("research",research)
  35.     temps = re.search(research, s).group()
  36.     if temps == None:
  37.         return '没有匹配的信息。'
  38.     else:
  39.         print(temps)
  40.         for i in researcha:          #输入 s = 'ababacb', k = 3 结果有误 20200426  14:09
  41.             if temps.count(i)<k:
  42.                 return '没有匹配的信息。'
  43.         return len(temps)
  44. print(timu382(s,k))
  45. print(timu382("ababbc",2))
  46. s = "weitong"
  47. k = 2
  48. print(timu382(s,k))
  49. s = 'ababacb'
  50. k = 3
  51. print(timu382(s,k))
  52. print('done!')
复制代码


楼主:回复的
当 s 为空字符串时出错  
已修改~~~

=======================================
修改 当s = "weitong"   k = 2 时,不能处理的情况。20200426 0822
大佬辛苦啦!!!

=======================================
#输入 s = 'ababacb', k = 3 结果有误 20200426  14:09

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 12:29:20 | 显示全部楼层
  1. def P382(s,k):
  2.     n = len(s)
  3.     limit = len(s)
  4.     op = 0
  5.     while limit >= k-1:
  6.         for i in range(n-limit):
  7.             t = s[i:limit+i+1]
  8.             set1 = set(t)
  9.             for each in set1:
  10.                 if t.count(each) < k:
  11.                     break
  12.             else:
  13.                 op = 1
  14.                 break
  15.             
  16.         if op == 1:
  17.             break
  18.         limit -= 1
  19.     if op == 1:
  20.         return len(t)
  21.     else:
  22.         return 0

  23. s = input()
  24. k = int(input())
  25. print(P382(s,k))
复制代码

萌新请大佬赐教

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 13:23:27 | 显示全部楼层
有点像 二分法?2333
  1. def max_sub_str(sub_string, k):
  2.     length = len(sub_string)
  3.     if length < k:
  4.         return 0
  5.     for each in sub_string:
  6.         if sub_string.count(each) < k:
  7.             new_head = sub_string.find(each)
  8.             return max(max_sub_str(sub_string[:new_head], k), max_sub_str(sub_string[new_head+1:],k))
  9.     else:
  10.         return length
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 14:18:35 | 显示全部楼层
March2615 发表于 2020-4-23 10:04
子串和子序列是不同的
子串要求是原字符串中一块连续的字符串
子序列只要求从原字符串中按原顺序取出字 ...

这样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 15:04:48 | 显示全部楼层
  1. def f382(s, k):
  2.     char_list = set(s)
  3.     res = 0
  4.     for i in char_list:
  5.         if s.count(i) >= k:
  6.             res += s.count(i)
  7.     return res


  8. if __name__ == "__main__":
  9.     s = 'ababbc'
  10.     k = 2
  11.     print(f382(s, k))
  12.     s = "aaabb"
  13.     k = 3
  14.     print(f382(s, k))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:34:18 | 显示全部楼层
TJBEST 发表于 2020-4-22 20:15
就26个字母所以递归深度最大不超过30,超不超时不知道,但是正确性我觉得没问题

33 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:36:12 | 显示全部楼层

解答错误

输入:
  1. s = 'ababacb', k = 3
复制代码

输出:6
预期结果:0

子串一定要是连续的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:37:17 | 显示全部楼层

当 s 为空时出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:50:08 | 显示全部楼层

用时分别是 33 ms、72 ms、27 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:50:55 | 显示全部楼层

解答错误

输入:s = 'aaabbb', t = 3
输出:1
预期结果:6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 18:52:38 | 显示全部楼层
zltzlt 发表于 2020-4-23 18:50
用时分别是 33 ms、72 ms、27 ms

收到,第二个反而慢了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:55:58 | 显示全部楼层

第一段代码超时,第二段代码 20 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 18:57:01 | 显示全部楼层

输入以下数据超出时间限制:

  1. s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  2. t = 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 20:21:41 | 显示全部楼层
zltzlt 发表于 2020-4-23 18:55
第一段代码超时,第二段代码 20 ms

果然还是需要优化的
希望能多一点示例,这样测试起来也比较容易找漏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 22:17:53 | 显示全部楼层
zltzlt 发表于 2020-4-23 18:36
解答错误

输入:
  1. def f(s,k):
  2.     list1 = []
  3.     a = 0
  4.     while a < len(s):
  5.         if s.count(s[a])<k:
  6.             a += 1
  7.         else:
  8.             b = a+1
  9.             while b<len(s) and s.count(s[b])>=k:
  10.                 b +=1
  11.             list1.append(s[a:b])
  12.             a = b
  13.     list1.sort(key=lambda x:len(x), reverse=True)
  14.     for each in list1:
  15.         list2 = set(each)
  16.         judge = True
  17.         for n in list2:
  18.             if each.count(n)<k:
  19.                 judge = False
  20.         if judge:
  21.             return len(each)
  22.     return 0
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 13:26:13 | 显示全部楼层
whosyourdaddy 发表于 2020-4-22 21:31
def func382(s,k):
    temp = set(s)
    l = []

输入 s = "aaabbb", k = 3 时结果有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 13:27:02 | 显示全部楼层

输入 s = "aaabbb", k = 3 时出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 13:28:10 | 显示全部楼层
Joy187 发表于 2020-4-22 22:37
def func382(s,k):
    c=[]
    d=[0]*26

输入 s = "ababacb", k = 3 时结果有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-25 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表