【Python CheckiO 题解】Long Repeat


CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Long Repeat】:给定一个字符串,找到字符串中最长的相同字符重复出现的次数,并返回它的重复次数。例如:字符串“aaabbcaaaa”包含具有相同字母“aaa”,“bb”,“c”和“aaaa”的四个子字符串。 最后一个子字符串是最长的一个字符串,你应该返回 4 。

【链接】https://py.checkio.org/mission/long-repeat/

【输入】:一个字符串

【输出】:一个整数

【范例】

long_repeat('sdsffffse') == 4
long_repeat('ddvvrwwwrggg') == 3

解题思路

遍历字符串,如果前一个字符与后一个字符相同,就将其出现的次数加一,同时,每次遍历都用 max() 方法记录字符出现次数最多的

代码实现

def long_repeat(line: str) -> int:
    new_string = ''
    num = 0
    max_num = 0
    for string in line:
        if string != new_string:
            new_string = string
            num = 1
        else:
            num += 1
        max_num = max(max_num, num)
    return max_num


if __name__ == '__main__':
    # These "asserts" using only for self-checking and not necessary for auto-testing
    assert long_repeat('sdsffffse') == 4, "First"
    assert long_repeat('ddvvrwwwrggg') == 3, "Second"
    assert long_repeat('abababaab') == 2, "Third"
    assert long_repeat('') == 0, "Empty"
    print('"Run" is good. How is "Check"?')

大神解答

大神解答 NO.1

from itertools import groupby

def long_repeat(line):
    return max((sum(1 for _ in g) for k, g in groupby(line)), default=0)

大神解答 NO.2

def long_repeat(line):
    m=0
    p=0
    for x in range(len(line)):
        if x<len(line)-1:
            if line[x]==line[x+1]:
                p+=1
            else:
                p=0
        if p+1>m:
            m=p+1
    return m
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读