По заданному массиву строк найдите все пары анаграмм в данном массиве.
Пример:
Input: arr[] = {"geeksquiz", "geeksforgeeks", "abcd", "forgeeksgeeks", "zuiqkeegs"}; Output: (geeksforgeeks, forgeeksgeeks), (geeksquiz, zuiqkeegs)
Мы можем найти две строки , являются ли анаграмма или не в линейное время с помощью счетчика массива (см метода 2 из этого ).
Одна простая идея выяснить, все ли пары анаграмм — это запустить два вложенных цикла. Внешний цикл выбирает все строки одну за другой. Внутренний цикл проверяет, являются ли оставшиеся строки анаграммой строки, выбранной внешним циклом.
Ниже приведена реализация этого подхода:
|
Джава
|
C #
|
Выход:
geeksquiz is anagram of zuiqkeegs geeksforgeeks is anagram of forgeeksgeeks
Временная сложность вышеуказанного решения составляет O (n 2 * m), где n — количество строк, а m — максимальная длина строки.
Оптимизации:
Мы можем оптимизировать вышеуказанное решение, используя следующие подходы.
1) Использование сортировки: мы можем отсортировать массив строк так, чтобы все анаграммы собрались вместе. Затем распечатайте все анаграммы путем линейного обхода отсортированного массива. Временная сложность этого решения составляет O (mnLogn) (мы будем делать O (nLogn) сравнений в сортировке, а сравнение займет O (m) времени)
2) Использование хеширования: мы можем построить хеш-функцию, например, XOR или сумму значений ASCII всех символов для строки. Используя такую хеш-функцию, мы можем построить хеш-таблицу. При создании хеш-таблицы мы можем проверить, хэшировано ли уже значение. Если да, мы можем вызвать areAnagrams (), чтобы проверить, действительно ли две строки являются анаграммами (обратите внимание, что xor или сумма значений ASCII недостаточны, см. Комментарий Каушика Леле здесь )
Эта статья предоставлена Abhishek. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или хотите поделиться дополнительной информацией по вышеуказанной теме.
Рекомендуемые посты:
- Число пар индексов, таких что s [i] и s [j] являются анаграммами
- Проверьте, являются ли две строки к-анаграммами или нет
- Проверьте, являются ли две строки анаграммами друг друга, используя unordered_map в C ++
- Учитывая последовательность слов, выведите все анаграммы вместе | Набор 2
- Учитывая последовательность слов, выведите все анаграммы вместе, используя STL
- Учитывая последовательность слов, выведите все анаграммы вместе | Комплект 1
- Печатайте анаграммы вместе в Python, используя List и Dictionary
- Распечатать массив строк в отсортированном порядке без копирования одной строки в другую
- Пары полных струн в двух наборах струн
- Пары символов из двух строк с четной суммой
- Количество пар строк, которые отличаются ровно на одну позицию
- Подсчитать пары строк, которые удовлетворяют заданным условиям
- Пары строк, которые при объединении содержат каждый символ «строки»
- Минимальное количество пар, необходимое для того, чтобы две строки были одинаковыми
- Подсчет пар неперекрывающихся палиндромных подстрок данной строки
0.00 (0%) 0 votes