最长连续运行“ A”

时间:2018-11-08 21:48:26

标签: python-3.x

我正在尝试通过代码的“拐角案例”来识别问题。基本上,我试图在输入的字符串中找到最长的连续“ A”运行。我有一个解决方案,但这并不理想-请参阅底部的条件。基本上,如果字符串只是“ AAAA”,如何将max设置为4并打印出来呢?

dna = input()
index = 0
length = len(dna)
counter = 0
max = 0

while index < length:
    if dna[index] == 'A':
        counter += 1
    else:
        if counter > max:
            max = counter
        counter = 0
    index += 1

if 'A' * length == dna:
    print(length)
else:
    print(max)

2 个答案:

答案 0 :(得分:1)

出于同样的原因,您的代码也将在字符串的末尾出现最长'A'的任何字符串问题。

基本上,您应该在每次检查后分配最大值,而不仅仅是在找到下一个不匹配项之后分配

while index < length:
    if dna[index] == 'A':
        counter += 1
    else:
        counter = 0
    if counter > max:
        max = counter
    index += 1

答案 1 :(得分:0)

我在这里有一个“递归”解决方案。 为了解决字符串只是“ AAAAA”的问题,在循环/递归结束时,如果counter> max value,该函数将返回counter而不是max。

def find_longest_A(dna, counter = 0, max = 0):
    ''' counter: the current consecutive length of A
        max : Max value of A consecutive run'''
    if len(dna) == 0:
        if (counter > max):
            return counter
        return max
    if dna[0] == "A":
        counter += 1
    else:
        if (counter > max):
            max = counter
        counter = 0
    return find_longest_A(dna[1:],counter, max)