我正在尝试通过代码的“拐角案例”来识别问题。基本上,我试图在输入的字符串中找到最长的连续“ 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)
答案 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)