【Python CheckiO 题解】Long Repeat

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

题目描述

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

【输入】:一个字符串

【输出】:一个整数

【范例】:

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
发布了115 篇原创文章 · 获赞 348 · 访问量 37万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览