Алгоритм сравнения строк
Подскажите алгоритм который на вход получает строку и сравнивает ее с шаблоном, а потом выдает ответ true если строка и шаблон одинаковые и false если они разные. Спецсимволы используемые в шаблоне:
*
- заменяем на любое количество символов, в том числе и 0 символов
?
- заменяет только 1 символ.
Подойдет пример на любом языке, но лучше на питоне. Как могут выглядеть примеры решения:
print(match_pattern("abc", "a?")) # Выведет False
print(match_pattern("abc", "ab?")) # Выведет True
print(match_pattern("abc", "a?b")) # Выведет False
print(match_pattern("abc", "???")) # Выведет True
print(match_pattern("abc", "a?c")) # Выведет True
print(match_pattern("abc", "a*")) # Выведет True
print(match_pattern("abc", "ab*")) # Выведет True
print(match_pattern("abc", "ab")) # Выведет False
print(match_pattern("abc", "**")) # Выведет True
print(match_pattern("abc", "ac")) # Выведет False
print(match_pattern("abc", "ac*")) # Выведет False
Вот к примеру так выглядит код обрабатывающий только вопрос
def match_pattern(input_string, pattern):
# Функция для проверки соответствия строки шаблону
def is_match(s, p):
# Инициализация индексов для строк
i, j = 0, 0
n, m = len(s), len(p)
super = False
# Проверка каждого символа шаблона
while j < m:
if p[j] == '?' or s[i] == p[j]:
i += 1
else:
return False
j += 1
return i == n
# Возвращаем результат проверки соответствия всей строки шаблону
return is_match(input_string, pattern)
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Вот, похоже, самое простое: https://docs.python.org/3/library/fnmatch.html
import fnmatch
print(fnmatch.fnmatch("abc", "a?")) # Выведет False
print(fnmatch.fnmatch("abc", "ab?")) # Выведет True
print(fnmatch.fnmatch("abc", "a?b")) # Выведет False
print(fnmatch.fnmatch("abc", "ab*")) # Выведет True
print(fnmatch.fnmatch("abc", "ac")) # Выведет False
print(fnmatch.fnmatch("abc", "ac*")) # Выведет False