РУҚА
Задания № 24, 25 · ЕГЭ

Лексикографическое сравнение строк

Как сравнивать строки посимвольно, определять порядок слов и решать задачи на сортировку
6 мин чтенияСложность: Обновлено 29 сентября 2026

Лексикографическое сравнение строк — это сравнение слов так, как они располагаются в словаре: сначала сравниваются первые символы, затем вторые и так далее. Тема нужна для определения порядка слов, поиска минимальной или максимальной строки и решения задач, где строки требуется отсортировать.

Что такое лексикографический порядок

Перед изучением темы полезно повторить, что строка состоит из символов, а каждый символ имеет индекс. В большинстве учебных задач нумерация индексов начинается с нуля: первый символ имеет индекс 0. Подробнее о строении строки рассказано на страницах символ строки и индекс символа.

D
Лексикографический порядок

Лексикографический порядок — порядок строк, при котором строки сравниваются слева направо по первым различающимся символам. Название связано с порядком слов в словаре.

Пусть есть две строки \(A\) и \(B\). Алгоритм сравнения таков: сначала сравниваются \(A[0]\) и \(B[0]\). Если они различаются, результат определяется только ими. Если равны, сравниваются символы с индексом 1, затем 2 и так далее. Сравнение заканчивается при первом различии или после окончания одной из строк.

\[A < B \iff \exists i:\ A[0]=B[0],\ldots,A[i-1]=B[i-1],\ A[i]<B[i]\]
T
Правило первого различия

Результат сравнения двух строк определяется первым индексом \(i\), на котором символы различаются. Если \(A[i] < B[i]\), то \(A < B\); если \(A[i] > B[i]\), то \(A > B\).

Например, строка «кот» меньше строки «кит», потому что первые символы равны, а на индексе 1 сравниваются «о» и «и». В русском алфавите «и» расположена раньше «о», поэтому «кит» меньше «кот».

Сравнение символов и строк разной длины

Чтобы сравнивать символы, нужно знать их порядок. В задачах с русскими или английскими буквами обычно используется порядок алфавита. Для цифр порядок естественный: «0» меньше «1», «1» меньше «2» и так далее. В программировании фактический порядок определяется кодами символов, поэтому прописные и строчные буквы могут располагаться не так, как ожидается по словарю.

!
Регистр имеет значение

Строки «Дом» и «дом» могут сравниваться не как одинаковые слова: прописная и строчная буквы — разные символы. Если в условии не сказано игнорировать регистр, учитывайте его.

Особый случай возникает, когда все символы короткой строки совпали с началом длинной. Тогда короткая строка считается меньшей. Например, «кот» меньше «коты», потому что после совпадения «к», «о», «т» первая строка закончилась.

\[A\text{ является префиксом }B\ \land\ |A|<|B|\ \Longrightarrow\ A<B\]
СравнениеПервое различие или причинаРезультат
«абв» и «абг»«в» раньше «г»«абв» < «абг»
«дом» и «дор»«м» раньше «р»«дом» < «дор»
«лес» и «лесник»Первая строка закончилась«лес» < «лесник»
«мир» и «мир»Строки совпадают\(A=B\)

Символы можно перебирать обычным циклом, как описано на странице перебор строки. При ручном решении удобно записывать индексы и отмечать первую позицию, где появляется различие.

Микро-проверка

Какая строка лексикографически меньше?

Алгоритм сравнения строк

При программном сравнении удобно идти по индексам от 0 до длины меньшей строки минус один. На каждой позиции проверяются символы. Как только найдено различие, можно сразу вернуть результат. Если различий нет, сравниваются длины строк: меньшая длина означает меньшую строку.

T
Алгоритм

1. Найдите \(m=\min(|A|,|B|)\). 2. Для \(i\) от 0 до \(m-1\) найдите первый индекс, где \(A[i]\ne B[i]\). 3. Сравните эти символы. 4. Если все первые \(m\) символов равны, сравните длины строк.

Python
1def compare_strings(a, b):
2    m = min(len(a), len(b))
3    for i in range(m):
4        if a[i] < b[i]:
5            return -1
6        if a[i] > b[i]:
7            return 1
8    if len(a) < len(b):
9        return -1
10    if len(a) > len(b):
11        return 1
12    return 0

Значения результата обычно трактуют так: \(-1\) означает \(A<B\), \(0\) — равенство, \(1\) — \(A>B\). В конкретном языке программирования сравнение строк может быть встроено, но для экзамена важно понимать, какой алгоритм скрывается за операцией сравнения.

Как экономить время

Не сравнивайте длины в начале: длинная строка может оказаться меньшей из-за первого символа. Сначала ищите первое различие, а длины проверяйте только после полного совпадения общей части.

Разбор задачи на порядок слов

Рассмотрим набор строк: «мел», «мель», «мак», «море», «мама». Требуется расположить их по возрастанию. Сначала сравним первые символы. Все слова начинаются с «м», поэтому переходим к следующему символу. У слов «мел» и «мель» второй символ «е», у остальных — «а» или «о».

№
Разобранный пример

Определим порядок строк «мел» и «мель», а затем найдём первую строку среди списка: «мел», «мель», «мак», «море», «мама».

1
Сравниваем «мел» и «мель»: первые три символа совпадают.
\(\displaystyle \text{мел} = \text{мел} + \varepsilon\)
2
Первая строка закончилась, а вторая имеет дополнительный символ «ь».
\(\displaystyle |\text{мел}|=3<4=|\text{мель}|\)
3
Следовательно, «мел» расположено раньше «мель».
\(\displaystyle \text{мел}<\text{мель}\)
4
Для поиска первой строки сравниваем вторые символы групп: «а», «е», «о». Раньше всех идёт «а».
\(\displaystyle \text{а}<\text{е}<\text{о}\)
5
Среди строк на «ма» сравниваем третьи символы: у «мак» — «к», у «мама» — «м».
\(\displaystyle \text{к}<\text{м}\)
6
Получаем начало полного порядка.
\(\displaystyle \text{мак}<\text{мама}<\text{мел}<\text{мель}<\text{море}\)

В последнем шаге важно не перепутать сравнение всей строки и сравнение длины. Например, «море» длиннее «мак», но порядок определился уже на третьем символе: «к» раньше «р». Длина учитывается только для строк, у которых совпала вся общая часть.

Показать решение задачи на сортировку Решение

Если строки хранятся в массиве, можно применить сортировку с обычным сравнением строк. После сортировки первый элемент будет минимальной строкой, последний — максимальной.

Python
1words = ["мел", "мель", "мак", "море", "мама"]
2words.sort()
3print(words)

Результат: [«мак», «мама», «мел», «мель», «море»]. При самостоятельной сортировке сравнивайте соседние элементы и каждый раз используйте правило первого различия.

Сортировка и типичные экзаменационные задачи

В задачах требуется не только отсортировать слова, но и определить, сколько пар находятся в правильном порядке, найти слово с максимальным или минимальным значением, проверить упорядоченность массива строк или построить строку из выбранных элементов.

  • Для поиска минимума запомните первую строку, затем сравнивайте её с каждой следующей.
  • Для проверки возрастания сравнивайте соседние строки: должно выполняться \(S[i]\le S[i+1]\).
  • Для проверки строгого возрастания используйте условие \(S[i]<S[i+1]\).
  • Если нужно отсортировать строки по убыванию, меняйте направление сравнения или просматривайте результат сортировки с конца.
  • Если строки содержат числа, уточните условие: сравнение как строк и сравнение числовых значений дают разные результаты.
!
Частые ошибки

1. Сравнивать длины раньше символов. 2. Считать, что более длинная строка всегда больше. 3. Сравнивать сумму кодов или сумму номеров букв вместо первого различия. 4. Забывать о регистре. 5. Путать лексикографический порядок с числовым: строка «10» может стоять раньше строки «2», потому что «1» раньше «2».

Если строка состоит из цифр и обозначает число, сначала нужно преобразовать её в число или выполнить разбор чисел в строке. Если же условие прямо говорит «слова», «строки» или «символы», используйте лексикографическое сравнение.

Запомнить

Сначала сравниваются символы, затем — длины. Длина учитывается только тогда, когда одна строка полностью совпадает с началом другой.

Q
Быстрый тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · Префикс
Какая строка меньше: «ал» или «а»?
Главное за минуту

Главное

  • Лексикографическое сравнение идёт слева направо и останавливается на первом различающемся символе.
  • Если одна строка является префиксом другой, меньшей считается более короткая строка.
  • Регистр и порядок кодов символов могут влиять на результат, если условие не задаёт иное правило.
  • При сортировке строк применяется обычное сравнение: ищите минимум, максимум или проверяйте соседние пары.
  • Не смешивайте строковое и числовое сравнение: «12» как строка и число 12 — разные объекты.