【解決方法】文字列内の最長部分文字列


Hello,

I have the following assignment:

’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ‘’ ’ ’ ‘’ ’ ’ ’

Assume s is a string of lower case characters.

Write a program that prints the longest substring of s in which the letters occur in alphabetical order. For example, if s = ‘azcbobobegghakl’, then your program should print

Longest substring in alphabetical order is: beggh
In the case of ties, print the first substring. For example, if s = ‘abcbcd’, then your program should print

Longest substring in alphabetical order is: abc
’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ‘’ ’ ’ ‘’ ’ ’ ’

I have no idea on the outline of this algoroithm. Could somoeone please give me an idea?

Thank you.

私が試したこと:

この演習をどのように開始すればよいか、まったくわかりませんでした。

解決策 1

これは、chatGPT の厚意により、Python で行う 1 つの方法です。

def longest_substring(s):
    max_length = 0
    current_length = 0
    start = 0
    max_start = 0
    for i in range(len(s) - 1):
        if ord(s[i + 1]) >= ord(s[i]):
            current_length += 1
        else:
            if current_length > max_length:
                max_length = current_length
                max_start = start
            start = i + 1
            current_length = 0
    if current_length > max_length:
        max_length = current_length
        max_start = start
    return s[max_start:max_start + max_length + 1]
s = 'azcbobobegghakl'
print("Longest substring in alphabetical order is:", longest_substring(s))

このコードは、ループを使用して文字列 s 内の文字を反復処理し、2 つのポインター start と current_length を維持して、現在検討されている部分文字列と、これまでに確認された最長の部分文字列の長さを追跡します。 ord 関数は文字を ASCII コードに変換するために使用され、現在の部分文字列がアルファベット順であるかどうかを判断するために ASCII コード間で比較が行われます。

コメント

タイトルとURLをコピーしました