pythonデータ構造の文字列検索の2つの例


検索文字列の最長連続数のサブストリング
問題の説明
指定した文字列の中で最も長い数字の文字列を検索し、その先頭の下付き文字、長さ、文字列を返します.たとえば、次のようにします.
 input  :abc12345cd123ef234567df
 output:15 6  234567
インプリメンテーション
'''
               ,       ,     .  :
input  :abc12345cd123ef234567df
output:15 6 234567
'''
def find_max_length_str(string):
    str_length = len(string)
    i = 0
    max_length = 0
    num_length = 0
    start_num = 0
    while i < str_length:
        if string[i] > '0' and string[i] < '9':
            start_num = i
            num_length = 0
            while i < str_length and string[i] > '0' and string[i] < '9':
                i += 1
                num_length += 1
            if num_length != 0 and max_length <= num_length:
                max_length = num_length
        i += 1
    return start_num, num_length, string[start_num:start_num + num_length]

文字列を1回繰り返すだけで、時間の複雑さ:O(n)
数字文字列の中で最も長い連続する同じ数字の文字列を検索します
問題の説明
所定の数字列の中で最も長い連続する同じ文字列を検索し、その先頭の下付き文字、長さ、サブ列を返す.
input:11233344555666666 output:11 6 666666
インプリメンテーション
'''
            ,       ,     
input  :11233344555666666
output:11 6 666666
'''
def find_same_sequence_num(string):
    str_length = len(string)
    i = 0
    max_length = 0
    start_num = 0
    num_length = 0
    while i < str_length:
        if i + 1 < str_length and string[i] == string[i + 1]:
            start_num = i
            num_length = 1
            while i + 1 < str_length and string[i] == string[i + 1]:
                i += 1
                num_length += 1
            if num_length != 0 and max_length <= num_length:
                max_length = num_length
        i += 1
    return start_num, num_length, string[start_num:start_num + num_length]

   
同様に文字列を1回巡回するだけで,時間複雑度はO(n)である.