鱼C论坛

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

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

[复制链接]
发表于 2020-2-12 19:20:38 | 显示全部楼层
本帖最后由 William4869 于 2020-2-12 19:42 编辑
def f330(s):
    i=0
    count=0
    while i<len(s)-2:
        if i==len(s)-3:
            if s[i]==s[i+1] and s[i]==s[i+2]:
                count+=1
                break
        if s[i]==s[i+1]and s[i]==s[i+2]and s[i]==s[i+3]:
            count+=1
            i+=3
        elif s[i]==s[i+1] and s[i]==s[i+2]:
            count+=1
            i+=3
        elif s[i+1]==s[i+2]:
            i+=1
        else:
            i+=2
    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:
def func330(s:str) -> int:
    count = 0
    time = 0
    if not len(s):
        return 0
    for i in range(len(s)):
        if i+1 == len(s):
            break
        elif i == 0:
            pass
        elif time > 0:
            time -= 1
        elif s[i-1]==s[i]==s[i+1]:
            count += 1
            time = 2
    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:

解答错误

输入:
"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"

def fun330(s):
    if(len(s) == 0):
        return 0
    result = 0
    index = 2
    length = len(s)
    while index < length:
        if(s[index] == s[index-1] and s[index] == s[index-2]):
            result += 1
            index += 3
            continue
        index += 1
    return result

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 20:19:56 | 显示全部楼层
from itertools import groupby
def fun330(s):
    if not len(s):return 0
    result=0
    for k,v in groupby(s):result+=len(list(v))//3
    return result
不知道这样会不会快点

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-12 20:46:17 | 显示全部楼层
def f330(x):
    r=0
    n=''
    t=1
    for e in x:
        if e==n:
            t+=1
        else:
            r+=t//3
            t=1
        n=e
    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 | 显示全部楼层
这题简单点
def fun330(string):
    character = ''
    result = 0
    temp = 0
    for each in string:
        if each != character:
            if temp > 2:
                result += temp // 3
            character = each
            temp = 1
        else:
            temp += 1
    result += temp // 3
    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 编辑
def f330(s):
    a,b,n=0,0,0
    for i in s:
        if i=='a':
            b=0
            a+=1
            if a==3:
                n+=1
                a=0
        else:
            a=0
            b+=1
            if b==3:
                n+=1
                b=0
    return n
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-13 08:27:37 | 显示全部楼层
本帖最后由 yeyu0142 于 2020-2-13 13:25 编辑
def s330(str1):
    len_s = len(str1)
    list_s = []
    start = 0
    while start < len_s:
        for i in range(start,len_s):
            count_re = 0
            for j in range(i,len_s):
                if str1[i] == str1[j]:
                    count_re += 1
                else:
                    break
            if count_re >= 3:
                if i+count_re >= len_s:
                    list_s.append(str1[i:])
                else:
                    list_s.append(str1[i:i+count_re])
            break
        start = start + count_re
    count_return = 0
    for each in list_s:
        count_return = count_return + int(len(each)/3)
    return count_return

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-13 14:14:04 | 显示全部楼层
def fun330(x):
    y = ''
    count = 0
    for i in range(len(x)):
        if i <= 1:
            y += x[i]
        elif y[i-2] == y[i-1] == x[i] == 'a':
            if i >= len(x)-3:
                y += 'b'
            elif x[i+1] == x[i+2] == 'b':
                y = list(y)
                y[i-2] = 'b'
                y = ''.join(y)
                y += 'a'
            else:
                y += 'b'
            count += 1
        elif y[i-2] == y[i-1] == x[i] == 'b':
            if i >= len(x)-3:
                y += 'a'
            elif x[i+1] == x[i+2] == 'a':
                y = list(y)
                y[i-2] = 'a'
                y = ''.join(y)
                y += 'b'
            else:
                y += 'a'
            count += 1
        else:
            y += x[i]
    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-6-14 08:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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