文字がアルファベット順に出現する s の最長部分文字列を出力するプログラムを作成してください。たとえば、s = 'azcbobobegghakl' の場合、プログラムは次のように出力する必要があります。
アルファベット順で最も長い部分文字列は次のとおりです: beggh
同点の場合は、最初の部分文字列を出力します。たとえば、s = 'abcbcd' の場合、プログラムは次のように出力する必要があります。
アルファベット順で最も長い部分文字列: abc
これらはすべて、文字列があり、アルファベット順で最も長い部分文字列を見つける必要があると想定しています。
オプション A
test = s[0] # seed with first letter in string s
best = '' # empty var for keeping track of longest sequence
for n in range(1, len(s)): # have s[0] so compare to s[1]
if len(test) > len(best):
best = test
if s[n] >= s[n-1]:
test = test + s[n] # add s[1] to s[0] if greater or equal
else: # if not, do one of these options
test = s[n]
print "Longest substring in alphabetical order is:", best
オプション B
maxSub, currentSub, previousChar = '', '', ''
for char in s:
if char >= previousChar:
currentSub = currentSub + char
if len(currentSub) > len(maxSub):
maxSub = currentSub
else: currentSub = char
previousChar = char
print maxSub
オプション C
matches = []
current = [s[0]]
for index, character in enumerate(s[1:]):
if character >= s[index]: current.append(character)
else:
matches.append(current)
current = [character]
print "".join(max(matches, key=len))
オプション D
def longest_ascending(s):
matches = []
current = [s[0]]
for index, character in enumerate(s[1:]):
if character >= s[index]:
current.append(character)
else:
matches.append(current)
current = [character]
matches.append(current)
return "".join(max(matches, key=len))
print(longest_ascending(s))