假设 s 是一串小写字符。
编写一个程序,打印 s 中字母按字母顺序出现的最长子串。
例如,如果 s = 'azcbobobegghakl',那么您的程序应该打印
按字母顺序排列的最长子串是:beggh
如果是平局,则打印第一个子字符串。例如,如果 s = 'abbcbcd',那么你的程序应该打印
按字母顺序排列的最长子串是: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
string.
- 两个字符串都用第一个字母初始化。 (这样我们就可以随时阅读他们的最后一封信。)
- 然后我们迭代输入字符串
s
(从第二个字符开始)。
- 如果当前字符
c
满足要求c >= current[-1]
,我们将其添加到当前解决方案中。
- 我们可能存储
current
字符串为longest
.
- If
c
不满足订购要求,我们从新的解决方案开始current = c
.
- 最后,我们打印出
longest
string.
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
如何修复您的代码。上述条件:
Use >
代替>=
在比较中len(result) >= len(final)
,即仅更新final
解决方案如果是longer,但如果长度相同则不会。
考虑迪伦的评论
你说得对。我更新了代码和描述以正确处理这种情况s
以最长的字母子串结尾。 (移动else:
向下两行就足够了。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)