与えられた文字列の中から、パターンに一致する部分を総当たりで探します。
時間計算量は \( O(n \times m) \)、空間計算量は\( O(1) \) になります。
import random
import string
def match_pattern_bruteforce(target_str, pattern):
for i in range(len(target_str) - len(pattern) + 1):
str_i = i
pattern_i = 0
while str_i < len(target_str) and pattern_i < len(pattern) and target_str[str_i] == pattern[pattern_i]:
str_i += 1
pattern_i += 1
if pattern_i == len(pattern):
return i
return False
def print_match_pattern_result(target_str, pattern):
index = match_pattern_bruteforce(target_str, pattern)
if index:
print(f'"{pattern}"は {index+1}番目に見つかりました。')
else:
print(f'"{pattern}"は見つかりません。')
random.seed(1)
target_str = ''.join(random.choices(string.ascii_letters + string.digits, k=20))
# i0VpEBOWfbZAVaBSo63b
print(target_str)
print_match_pattern_result(target_str, "BSo63")
print_match_pattern_result(target_str, "BSo6E")