I'd approach the problem the following way:
- Let's define two strings: The
current string of increasing letters and the currently longest string.
- Both strings are initialized with the first letter. (This way we can always read their last letter.)
- Then we iterate over the input string
s (starting with the second character).
- If the current character
c fulfills the requirement c >= current[-1], we add it to the current solution.
- We possibly store the
current string as longest.
- If
c does not fulfill the ordering requirement, we start with a new solution current = c.
- Finally, we print the
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
How to fix your code wrt. the mentioned condition:
Use > instead of >= in the comparison len(result) >= len(final), i.e. only update the final solution if it is longer, but not if it has the same length.
Considering Dylans comment
You're right. I updated both code and description to correctly handle the case when s ends with the longest alphabetical substring. (Moving else: two lines down was sufficient.)