使用 Python 打印最长的字母子串,对于并列,打印第一个子串
Print the longest alphabetical substring using Python and for ties, print the first substring
假设s是一串小写字符。
编写一个程序,打印 s 中字母按字母顺序出现的最长子串。
例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印
Longest substring in alphabetical order is: beggh
在并列的情况下,打印第一个子字符串。例如,如果 s = 'abcbcd',那么你的程序应该打印
Longest substring in alphabetical order is: abc
这是我找到的代码。我如何在上面给出的关于关系的问题中实现后一个条件?
*s = raw_input('provide string: ')
result = []
final = []
for letters in s:
result = result + [letters]
if result == sorted(result) and len(result) >= len(final):
final = result
elif result != sorted(result):
result = [result[len(result)-1]]
print('Longest substring in alphabetical order is: '+(''.join(final)))*
我会通过以下方式解决问题:
- 让我们定义两个字符串:递增字母的
current
字符串和当前的 longest
字符串。
- 两个字符串都用第一个字母初始化。 (这样我们就可以随时阅读他们的最后一封信。)
- 然后我们遍历输入字符串
s
(从第二个字符开始)。
- 如果当前字符
c
满足要求c >= current[-1]
,我们将其添加到当前解决方案中。
- 我们可能将
current
字符串存储为 longest
。
- 如果
c
不满足订购要求,我们从新的解决方案开始current = c
。
- 最后,我们打印
longest
字符串。
s = "azcbobobegghakl"
longest = s[0]
current = s[0]
for c in s[1:]:
if c >= current[-1]:
current += c
if len(current) > len(longest):
longest = current
else:
current = c
print "Longest substring in alphabetical order is:", longest
如何修复您的代码。提到的条件:
在比较 len(result) >= len(final)
中使用 >
而不是 >=
,即如果 更长 ,则仅更新 final
解决方案],但如果它具有相同的长度则不会。
考虑迪伦的评论
你是对的。我更新了代码和描述以正确处理 s
以最长的字母子字符串结尾的情况。 (将 else:
向下移动两行就足够了。)
假设s是一串小写字符。 编写一个程序,打印 s 中字母按字母顺序出现的最长子串。
例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印
Longest substring in alphabetical order is: beggh
在并列的情况下,打印第一个子字符串。例如,如果 s = 'abcbcd',那么你的程序应该打印
Longest substring in alphabetical order is: abc
这是我找到的代码。我如何在上面给出的关于关系的问题中实现后一个条件?
*s = raw_input('provide string: ')
result = []
final = []
for letters in s:
result = result + [letters]
if result == sorted(result) and len(result) >= len(final):
final = result
elif result != sorted(result):
result = [result[len(result)-1]]
print('Longest substring in alphabetical order is: '+(''.join(final)))*
我会通过以下方式解决问题:
- 让我们定义两个字符串:递增字母的
current
字符串和当前的longest
字符串。 - 两个字符串都用第一个字母初始化。 (这样我们就可以随时阅读他们的最后一封信。)
- 然后我们遍历输入字符串
s
(从第二个字符开始)。 - 如果当前字符
c
满足要求c >= current[-1]
,我们将其添加到当前解决方案中。 - 我们可能将
current
字符串存储为longest
。 - 如果
c
不满足订购要求,我们从新的解决方案开始current = c
。 - 最后,我们打印
longest
字符串。
s = "azcbobobegghakl"
longest = s[0]
current = s[0]
for c in s[1:]:
if c >= current[-1]:
current += c
if len(current) > len(longest):
longest = current
else:
current = c
print "Longest substring in alphabetical order is:", longest
如何修复您的代码。提到的条件:
在比较 len(result) >= len(final)
中使用 >
而不是 >=
,即如果 更长 ,则仅更新 final
解决方案],但如果它具有相同的长度则不会。
考虑迪伦的评论
你是对的。我更新了代码和描述以正确处理 s
以最长的字母子字符串结尾的情况。 (将 else:
向下移动两行就足够了。)