Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Комбинируем алгоритмы поиска строки из предыдущих статей
Когда-то я думал, что поиск строки прост и однозначен. Нет, много чего есть "друг Горацио", над стоит поломать голову.
Сегодня мы займёмся алгоритмами, которые являются такими комбинациями предыдущих (см. статья 1 и статья 2). Комбинаций, в действительности, не мало и все мне лень здесь представлять. Но идею, я думаю, вы легко уловите. Идея следующая: искать сразу не один символ и не всю строку, а её часть (срез). А потом, если найдено, проверить вторую часть. Какой в этом смысл? Да просто ещё один вариант поиска. И я не готов сказать, что он, скажем будет работать быстрее предыдущих или медленнее. Тем более я не знаю, как python сравнивает строки и срезы. Требуется исследование. Ну, закончу с темой поиска, попробую исследовать на скорость различные алгоритмы. Было бы интересно сравнить и, конечно, опубликовать в Дзен.
Первый алгоритм (рис. 1) ищет нужный срез сравнением и если такой срез найден, сравнивает вторую половину строки. Как видите, всё строится на срезах и их сравнении.
Пример на рис. 2. Срез ищется как и в программе на рис. 1. Ну а вторая половинка сравнивается посимвольно. Цикл while, конечно, здесь рулит, но, как мы видели в предыдущей статье, это можно сделать короче. Но сделайте это сами.
Наконец пример на рис. 3. Здесь для поиска "подозрительного" среза используется метод find(). Ну а вторую половину сравниваем, как это делали в программе на рис. 1.
Отступление
Я люблю такое понятие, как "купаться в коде". Я не знаю, кто-то писал об этом или нет. Напишу в своих философских заметках, наверное. Это когда вы легко на одну и ту же задачу пишите разные алгоритмы и варианты представления на языке программирования. Да ещё от этого и удовольствие получаете. Считаю этот показатель важным. Вот не забывайте об этом показателе.
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.