【发布时间】:2017-06-04 15:48:04
【问题描述】:
假设我有一串小写字母,例如
'ablccmdnneofffpg'
我的目标是在这个字符串中找到最长的连续数字序列,在这种情况下是:
'abcdefg'
直观的尝试是在每个字母周围找到循环并获得从该字母开始的最长序列。一种可能的解决方案是
longest_length = 0
start = None
current_start = 0
while current_start < len(word) - longest_length:
current_length = 1
last_in_sequence = ord(word[current_start])
for i in range(current_start + 1, len(word)):
if ord(word[i]) - last_in_sequence == 1:
current_length += 1
last_in_sequence = ord(word[i])
if current_length > longest_length:
longest_length = current_length
start = current_start
while (current_start < len(word) - 1 and
ord(word[current_start + 1]) - ord(word[current_start]) == 1):
current_start += 1
current_start += 1
有没有其他方法可以用更少的行来解决问题,甚至使用一些pythonic方法?
【问题讨论】:
-
你想找到最长的序列,还是这样的序列的长度?
-
您的算法使用 CPU 周期。您可以一次跟踪所有可能的序列,然后只迭代一次以换取内存。