Дан массив строк, нужно сгруппировать в нем анаграммы.

Чтобы найти анаграммы слова в словаре на Go, можно использовать сортировку букв слова как ключ. Все слова, которые при сортировке букв дают одинаковую строку, являются анаграммами друг друга.

Короткий ответ

Что ответить на собеседовании

Чтобы найти анаграммы слова в словаре на Go, можно использовать сортировку букв слова как ключ. Все слова, которые при сортировке букв дают одинаковую строку, являются анаграммами друг друга.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив строк, нужно сгруппировать в нем анаграммы. Слово X является анаграммой слова Y, если оно может быть получено из другого перестановкой букв. in: ['eat', 'tea', 'tan', 'ate', 'nat', 'bat'] out: [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']] in: ['адрес', 'среда', 'атлас', 'салат', 'клоун', 'уклон', 'кулон'] out: [['адрес', 'среда'], ['атлас', 'салат'], ['клоун', 'уклон', 'кулон']]

Ответ

Чтобы найти анаграммы слова в словаре на Go, можно использовать сортировку букв слова как ключ. Все слова, которые при сортировке букв дают одинаковую строку, являются анаграммами друг друга.

Пример:

package main

import (
	"fmt"
	"sort"
	"strings"
)

func sortString(s string) string {
	chars := strings.Split(s, "")
	sort.Strings(chars)
	return strings.Join(chars, "")
}

func findAnagrams(word string, dictionary []string) []string {
	key := sortString(word)
	var anagrams []string
	for _, w := range dictionary {
		if w != word && sortString(w) == key {
			anagrams = append(anagrams, w)
		}
	}
	return anagrams
}

func main() {
	dict := []string{"listen", "silent", "enlist", "google", "inlets", "banana"}
	word := "listen"
	fmt.Println(findAnagrams(word, dict)) // [silent enlist inlets]
}

Идея в том, что сортировка букв нормализует слово, и все анаграммы имеют одинаковый отсортированный вид.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее