2

文字がアルファベット順に出現する s の最長部分文字列を出力するプログラムを作成してください。たとえば、s = 'azcbobobegghakl' の場合、プログラムは次のように出力する必要があります。

アルファベット順で最も長い部分文字列は次のとおりです: beggh

同点の場合は、最初の部分文字列を出力します。たとえば、s = 'abcbcd' の場合、プログラムは次のように出力する必要があります。

アルファベット順で最も長い部分文字列: abc

4

3 に答える 3

3

これらはすべて、文字列があり、アルファベット順で最も長い部分文字列を見つける必要があると想定しています。

オプション 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))
于 2013-11-11T08:47:38.567 に答える