鱼C论坛

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

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

[复制链接]
发表于 2020-2-12 19:20:38 | 显示全部楼层
本帖最后由 William4869 于 2020-2-12 19:42 编辑
  1. def f330(s):
  2.     i=0
  3.     count=0
  4.     while i<len(s)-2:
  5.         if i==len(s)-3:
  6.             if s[i]==s[i+1] and s[i]==s[i+2]:
  7.                 count+=1
  8.                 break
  9.         if s[i]==s[i+1]and s[i]==s[i+2]and s[i]==s[i+3]:
  10.             count+=1
  11.             i+=3
  12.         elif s[i]==s[i+1] and s[i]==s[i+2]:
  13.             count+=1
  14.             i+=3
  15.         elif s[i+1]==s[i+2]:
  16.             i+=1
  17.         else:
  18.             i+=2
  19.     return count

复制代码


我也不知道想的对不对,测了几个没什么问题,来试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-12 19:31:42 | 显示全部楼层

一开始就有错

输入:"baaaaa"
输出:2
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-12 19:32:16 | 显示全部楼层
William4869 发表于 2020-2-12 19:20
我也不知道想的对不对,测了几个没什么问题,来试试

不会出错,但是输入超长字符串会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 19:45:50 | 显示全部楼层
zltzlt 发表于 2020-2-12 19:32
不会出错,但是输入超长字符串会超时

看看我多加个判定语句能不能过

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 19:46:52 | 显示全部楼层
本帖最后由 yexing 于 2020-2-12 20:02 编辑

不知道有没有bug:
  1. def func330(s:str) -> int:
  2.     count = 0
  3.     time = 0
  4.     if not len(s):
  5.         return 0
  6.     for i in range(len(s)):
  7.         if i+1 == len(s):
  8.             break
  9.         elif i == 0:
  10.             pass
  11.         elif time > 0:
  12.             time -= 1
  13.         elif s[i-1]==s[i]==s[i+1]:
  14.             count += 1
  15.             time = 2
  16.     return count
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-12 19:47:05 | 显示全部楼层
William4869 发表于 2020-2-12 19:45
看看我多加个判定语句能不能过

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

使用道具 举报

 楼主| 发表于 2020-2-12 19:47:56 | 显示全部楼层
yexing 发表于 2020-2-12 19:46
不知道有没有bug:

解答错误

输入:
  1. "babbbabbbaaaaaaaabbbaaabbaabbabbabaabbaabaabbaaabaabbbbbbabbbbbbbabbbabbabbabaaaabbbbbababbbaaaaabba"
复制代码

输出:14
预期结果:16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 20:02:14 | 显示全部楼层
本帖最后由 yexing 于 2020-2-12 20:04 编辑
zltzlt 发表于 2020-2-12 19:47
解答错误

输入:


改了。

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 20:09:36 | 显示全部楼层
本帖最后由 546623863 于 2020-2-12 21:30 编辑
zltzlt 发表于 2020-2-12 19:31
一开始就有错

输入:"baaaaa"

  1. def fun330(s):
  2.     if(len(s) == 0):
  3.         return 0
  4.     result = 0
  5.     index = 2
  6.     length = len(s)
  7.     while index < length:
  8.         if(s[index] == s[index-1] and s[index] == s[index-2]):
  9.             result += 1
  10.             index += 3
  11.             continue
  12.         index += 1
  13.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 20:19:56 | 显示全部楼层
  1. from itertools import groupby
  2. def fun330(s):
  3.     if not len(s):return 0
  4.     result=0
  5.     for k,v in groupby(s):result+=len(list(v))//3
  6.     return result
复制代码

不知道这样会不会快点

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 20:46:17 | 显示全部楼层
  1. def f330(x):
  2.     r=0
  3.     n=''
  4.     t=1
  5.     for e in x:
  6.         if e==n:
  7.             t+=1
  8.         else:
  9.             r+=t//3
  10.             t=1
  11.         n=e
  12.     return r+t//3
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-12 21:38:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-12 21:38:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 21:42:50 | 显示全部楼层
这题简单点
  1. def fun330(string):
  2.     character = ''
  3.     result = 0
  4.     temp = 0
  5.     for each in string:
  6.         if each != character:
  7.             if temp > 2:
  8.                 result += temp // 3
  9.             character = each
  10.             temp = 1
  11.         else:
  12.             temp += 1
  13.     result += temp // 3
  14.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 23:04:08 | 显示全部楼层
def f330(s: str):
    s = list(s)
    n_a, n_b, count, i = 0, 0, 0, 0
    while i<len(s):
        if s[i] == 'a':
            count+=n_b//3
            n_b=0
            if n_a!=3:
                n_a += 1
            else:
                count+=1
                n_a=1
        elif s[i] == 'b':
            count+=n_a//3
            n_a=0
            if n_b!=3:
                n_b += 1
            else:
                count+=1
                n_b=1
        i+=1
    return count+n_a//3+n_b//3

print(f330('baaaaa'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-13 00:18:04 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-13 11:30 编辑
  1. def f330(s):
  2.     a,b,n=0,0,0
  3.     for i in s:
  4.         if i=='a':
  5.             b=0
  6.             a+=1
  7.             if a==3:
  8.                 n+=1
  9.                 a=0
  10.         else:
  11.             a=0
  12.             b+=1
  13.             if b==3:
  14.                 n+=1
  15.                 b=0
  16.     return n
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-13 01:22:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kinkon 于 2020-2-13 11:14 编辑
  1. def fun330(s):
  2.     a, c, t = 'a', 0, 0
  3.     for i in s:
  4.         if i == a:
  5.             t += 1
  6.             if t == 3:
  7.                 c += 1
  8.                 t = 0
  9.         else:
  10.             a, t = i, 1
  11.     return c
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-13 08:27:37 | 显示全部楼层
本帖最后由 yeyu0142 于 2020-2-13 13:25 编辑
  1. def s330(str1):
  2.     len_s = len(str1)
  3.     list_s = []
  4.     start = 0
  5.     while start < len_s:
  6.         for i in range(start,len_s):
  7.             count_re = 0
  8.             for j in range(i,len_s):
  9.                 if str1[i] == str1[j]:
  10.                     count_re += 1
  11.                 else:
  12.                     break
  13.             if count_re >= 3:
  14.                 if i+count_re >= len_s:
  15.                     list_s.append(str1[i:])
  16.                 else:
  17.                     list_s.append(str1[i:i+count_re])
  18.             break
  19.         start = start + count_re
  20.     count_return = 0
  21.     for each in list_s:
  22.         count_return = count_return + int(len(each)/3)
  23.     return count_return
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-13 14:14:04 | 显示全部楼层
  1. def fun330(x):
  2.     y = ''
  3.     count = 0
  4.     for i in range(len(x)):
  5.         if i <= 1:
  6.             y += x[i]
  7.         elif y[i-2] == y[i-1] == x[i] == 'a':
  8.             if i >= len(x)-3:
  9.                 y += 'b'
  10.             elif x[i+1] == x[i+2] == 'b':
  11.                 y = list(y)
  12.                 y[i-2] = 'b'
  13.                 y = ''.join(y)
  14.                 y += 'a'
  15.             else:
  16.                 y += 'b'
  17.             count += 1
  18.         elif y[i-2] == y[i-1] == x[i] == 'b':
  19.             if i >= len(x)-3:
  20.                 y += 'a'
  21.             elif x[i+1] == x[i+2] == 'a':
  22.                 y = list(y)
  23.                 y[i-2] = 'a'
  24.                 y = ''.join(y)
  25.                 y += 'b'
  26.             else:
  27.                 y += 'a'
  28.             count += 1
  29.         else:
  30.             y += x[i]
  31.     return count
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-13 17:42:27 | 显示全部楼层
fan1993423 发表于 2020-2-12 20:19
不知道这样会不会快点

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 22:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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