-1

初めてのプログラミング...私はこの演習をしようとしています..:

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

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

私はここにいた..びっくりする前に:

s = 'abcdezcbobobegghakl'
n = len(s) 
x = 0


x += 1
lengh = s[x-1]
if s[x] >= s[x-1]:
    lengh = lengh + s[x]


if s[x+1] < s[x]:
    n = len(lengh)
if x > n:
    break 

print('Longest substring in alphabetical order is: ' + str(lengh)) 

私はこのコードが悪いことを知っています..私はアルファベット順に部分文字列を見つけようとしていますが、何らかの方法で最も長いものを保持しています! 私は以前にプログラミングしたことがないので、普通かもしれませんが、本当にイライラしています...何か良いアイデア/助けはありますか??

4

5 に答える 5

0

最初に、問題を小さな問題に分解してみてください (問題が解決されるまで ! を最適化しないでください)。関数について学んでいる場合は、実行フローを読みやすく理解しやすいスニペットに分解する良い方法です。

開始する例は次のとおりです。

def get_sequence_size(my_string, start):
   # Your code here
   return size_of_sequence

current_position = 0
while current_position < len(my_string):
   # Your code here using get_sequence_size() function
于 2013-10-26T09:53:07.160 に答える
0

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

オプション 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:18:42.333 に答える
0

次のコードは、reduceメソッドを使用して問題を解決します。

solution = ''

def check(substr, char):
    global solution
    last_char = substr[-1]
    substr = (substr + char) if char >= last_char else char
    if len(substr) > len(solution):
        solution = substr
    return substr

def get_largest(s):
    global solution
    solution = ''
    reduce(check, list(s))
    return solution
于 2013-10-26T19:01:47.587 に答える
0
def longest(s):
    buff = ''
    longest = ''

    s += chr(255)
    for i in range(len(s)-1):
        buff += s[i]
        if not s[i] < s[i+1]:
            if len(buff) > len(longest):
                longest = buff
            buff = ''
    if len(buff) > len(longest):
        longest = buff

    return longest
于 2014-06-03T15:40:24.127 に答える
0
def find_longest_substr(my_str):

    # string var to hold the result
    res = ""

    # candidate for the longest sub-string 
    candidate = ""

    # for each char in string
    for char in my_str:

        # if candidate is empty, just add the first char to it
        if not candidate:
            candidate += char

        # if last char in candidate is "lower" than equal to current char, add char to candidate
        elif candidate[-1] <= char:
            candidate += char

        # if candidate is longer than result, we found new longest sub-string
        elif len(candidate) > len(res):
            res= candidate
            candidate = char

        # reset candidate and add current char to it
        else:
            candidate = char

    # last candidate is the longest, update result
    if len(candidate) > len(res):
        res= candidate

    return res


def main():
    str1 = "azcbobobegghaklbeggh"
    longest = find_longest_substr(str1)
    print longest


if __name__ == "__main__":
    main()
于 2013-10-26T10:08:09.590 に答える