鱼C论坛

 找回密码
 立即注册
查看: 3639|回复: 59

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

[复制链接]
发表于 2020-2-17 21:20:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


给定一个只包含 a 和 b 的字符串,找出不包含 aaa 或 bbb 的最长子字符串的长度。

示例 1:

输入:"baaabbabbb"
输出:7
解释:"aabbabb" 是最长符合条件的子字符串。
示例 2:

输入:"babba"
输出:5
解释:整个字符串符合条件。
示例 3:

输入:"abaaaa"
输出:4
解释:"abaa" 是最长符合条件的子字符串。


欢迎大家一起答题!
最佳答案
2020-2-18 20:52:19
本帖最后由 wcshds 于 2020-2-18 21:18 编辑

看看 這個行不行


  1. import re

  2. def Test(content):
  3.     if (content[:3] not in ['aaa', 'bbb']) and (content[-3:] not in ['aaa', 'bbb']):
  4.         content = re.sub(r'a{3,}', 'aa@aa', content)
  5.         content = re.sub(r'b{3,}', 'bb@bb', content)
  6.     if content[:3] in ['aaa', 'bbb']:
  7.         content = re.sub(r'a{3,}', 'aa@aa', content)
  8.         content = re.sub(r'b{3,}', 'bb@bb', content)
  9.         content = content[3:]
  10.     if content[-3:] in ['aaa', 'bbb']:
  11.         content = re.sub(r'a{3,}', 'aa@aa', content)
  12.         content = re.sub(r'b{3,}', 'bb@bb', content)
  13.         content = content[:-3]
  14.     lista = content.split('@')
  15.     return len(max(lista, key = len))
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2020-2-17 21:25:08 | 显示全部楼层
终于等到楼主出新题了,最近效率不高啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 21:25:54 | 显示全部楼层
fan1993423 发表于 2020-2-17 21:25
终于等到楼主出新题了,最近效率不高啊

没有啊,一天一题(除了悬赏题)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 21:53:16 | 显示全部楼层
  1. from itertools import groupby
  2. from bisect import bisect_left
  3. def fun314(s):
  4.     t,count,result=[],0,0
  5.     for k,v in groupby(s):
  6.         t.append(len(list(v)))
  7.     if bisect_left(t,3)==len(t):return sum(t)
  8.     else:
  9.         for i in t:
  10.             if i<3:
  11.                 count+=i
  12.             else:
  13.                 count+=2
  14.                 result=max(count,result)
  15.                 count=2
  16.     return result
复制代码

先写一个,可能效率不高

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-17 21:56:32 | 显示全部楼层
fan1993423 发表于 2020-2-17 21:53
先写一个,可能效率不高

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

使用道具 举报

发表于 2020-2-17 21:59:06 | 显示全部楼层
  1. def f334(x):
  2.     m,ca,cb,s=0,0,0,0
  3.     for e in x:
  4.         s+=1
  5.         if e=='a':
  6.             cb=0
  7.             ca+=1
  8.             if ca==3:
  9.                 m=max(s-1,m)
  10.                 ca=0
  11.                 s=2
  12.         else:
  13.             ca=0
  14.             cb+=1
  15.             if cb==3:
  16.                 m=max(s-1,m)
  17.                 cb=0
  18.                 s=2

  19.     return max(s,m)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:26:25 | 显示全部楼层
本帖最后由 William4869 于 2020-2-17 22:47 编辑
  1. def f334(s):
  2.     set1=set()
  3.     temp=0
  4.     set1.add(0)
  5.     for i in range(len(s)-2):
  6.         if s[i]==s[i+1] and s[i]==s[i+2]:
  7.             set1.add(i+2-temp)
  8.             temp=i+1
  9.         elif i==len(s)-3:
  10.             set1.add(i+3-temp)
  11.     return max(set1)

  12. print(f334("aabbaaadafaasfa"))
复制代码


试试

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:33:58 | 显示全部楼层
在写个方法
  1. def fun314(s):
  2.     flag,count,result=True,0,0
  3.     for i in range(len(s)-2):
  4.         if len(set(s[i:i+3]))==2 and flag:
  5.             count+=3
  6.             flag=False
  7.         elif len(set(s[i:i+3]))==2 and not flag:
  8.             count+=1
  9.         elif len(set(s[i:i+3]))==1:
  10.             result=max(count,result)
  11.             count,flag=0,True
  12.     return max(count,result)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:38:44 | 显示全部楼层
  1. def solve(s:str):
  2.     len_s, i, a_num, b_num, res, max_s = len(s), 0, 0, 0, 0, float('-inf')
  3.     while i < len_s:
  4.         res += 1
  5.         if s[i] == 'a':
  6.             a_num += 1
  7.             b_num = 0
  8.         else:
  9.             a_num = 0
  10.             b_num += 1
  11.         if a_num == 3 or b_num == 3:
  12.             if res - 1 > max_s:
  13.                 max_s = res - 1
  14.             res,a_num, b_num = 0, 0, 0
  15.             i -= 1
  16.             continue
  17.         i += 1
  18.     return max_s if max_s > res else res
复制代码

敲了一下午 c 有点累。。
不过感觉这道题,似曾相识。。

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:39:45 | 显示全部楼层
  1. def fun334(s : str):
  2.     if(s == ""):
  3.         return 0
  4.     Max = 0
  5.     index = 2
  6.     begin = 0
  7.     length = len(s)
  8.     while index < length:
  9.         if(s[index] == s[index-1] and s[index] == s[index-2]):
  10.             Max = max((index-begin),Max)
  11.             begin = index-1
  12.         index += 1
  13.     if(begin == 0):
  14.         return length
  15.     return Max
复制代码


随手写的玩的,不知道效率咋样

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:40:15 | 显示全部楼层
本帖最后由 ouyunfu 于 2020-2-17 22:42 编辑
  1. def f334(s:str)->int:
  2.     L,count,n_a,n_b=[],0,0,0
  3.     for i in s:
  4.         if i=='a':
  5.             n_b=0
  6.             if n_a<2:
  7.                 n_a+=1
  8.                 count+=1
  9.             else:
  10.                 L.append(count)
  11.                 n_a=2
  12.                 count=2     
  13.         else:
  14.             n_a=0
  15.             if n_b<2:
  16.                 n_b+=1
  17.                 count+=1
  18.             else:
  19.                 L.append(count)
  20.                 n_b=2
  21.                 count=2
  22.     L.append(count)
  23.     return max(L)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-17 22:40:39 | 显示全部楼层
wanting-for 发表于 2020-2-17 22:38
敲了一下午 c 有点累。。
不过感觉这道题,似曾相识。。

你还在敲C代码啊,可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 22:46:03 | 显示全部楼层
fan1993423 发表于 2020-2-17 22:40
你还在敲C代码啊,可以的

毕竟不能永远陶醉在Python的温室啊,
还是得敲一下c的
但是 c 好难敲啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 22:48:55 | 显示全部楼层
  1. def f334(s):
  2.     temp,i,ret=0,0,0
  3.     while i<len(s)-2:
  4.         if s[i]==s[i+1] and s[i]==s[i+2]:
  5.             ret=max(i+2-temp,ret)
  6.             temp,i=i+1,i+3
  7.         elif i==len(s)-3:
  8.             ret=max(i+3-temp,ret)
  9.             i+=1
  10.         else: i+=1
  11.     return ret
复制代码


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

使用道具 举报

发表于 2020-2-17 22:50:55 | 显示全部楼层
wanting-for 发表于 2020-2-17 22:46
毕竟不能永远陶醉在Python的温室啊,
还是得敲一下c的
但是 c 好难敲啊

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

使用道具 举报

发表于 2020-2-17 23:09:00 | 显示全部楼层
str1 = 'baaabbabbb'
length = [0]
for i in range(len(str1)):
        for j in range(len(str1) - i):
                substr = str1[i : len(str1) - j]
                if ('aaa' not in substr) and ('bbb' not in substr):
                        length.append(len(substr))
print(max(length))

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-18 00:06:02 | 显示全部楼层
  1. def f334(s):
  2.     ab = ''
  3.     c = t = k = i = 0
  4.     while i < len(s):
  5.         if s[i] == ab:
  6.             k += 1
  7.             t += 1
  8.             if k == 3:
  9.                 c = max(t - 1, c)
  10.                 t, ab = 0, ''
  11.                 i -= 2
  12.             i += 1
  13.         else:
  14.             ab, k = s[i], 1
  15.             t += 1
  16.             i += 1
  17.     return c if c else t
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-18 00:42:09 | 显示全部楼层
叹息,用了双for
  1. def solve(s:str)->int:
  2.     res = 0
  3.     le = len(s)
  4.     for l in range(le):
  5.         for r in range(l+res,le+1):
  6.             now = s[l:r]
  7.             if ('aaa'in now)or('bbb'in now):
  8.                 break
  9.             res=max(res,r-l)
  10.         if le-l<res:break
  11.     return res
  12. if __name__ == '__main__':
  13.     print('示例1 输出:',solve("baaabbabbb"))
  14.     print('示例2 输出:',solve("babba"))
  15.     print('示例3 输出:',solve("abaaaa"))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-18 01:05:16 | 显示全部楼层
再来一种方法吧
  1. def p334(s):
  2.     i = t = c = 0
  3.     r = ''
  4.     while i < len(s):
  5.         r = s[i: i+3]
  6.         if 'aaa' == r or 'bbb' == r:
  7.             c = max(t + 2, c)
  8.             i += 1
  9.             t = 0
  10.         else:
  11.             i += 1
  12.             t += 1
  13.     return c if c else t
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-18 09:40:05 | 显示全部楼层
  1. def fun334(str_in):
  2.         s1pa = str_in.split("aaa")
  3.         s1pb = [p.split("bbb") for p in s1pa]
  4.         s1p = sum(s1pb, [])
  5.         t1 = max(s1p, key=lambda x: len(x))
  6.         c = str_in.index(t1)
  7.         l = len(t1)
  8.         result = t1
  9.         if c:
  10.                 if str_in[c] != str_in[c-1]:
  11.                         result = str_in[c-2:c] + result
  12.                 else:
  13.                         if str_in[c+1] != str_in[c-1]:
  14.                                 result = str_in[c-1:c] + result
  15.         if c + l < len(str_in):
  16.                 if str_in[c+l-1] != str_in[c+l]:
  17.                         result = result + str_in[c+l:c+l+2]
  18.                 else:
  19.                         if str_in[c+l-2] != str_in[c+l]:
  20.                                 result = result + str_in[c+l:c+l+1]
  21.         return len(result)
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 12:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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