Чтобы найти анаграммы слова в словаре на 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]
}
Идея в том, что сортировка букв нормализует слово, и все анаграммы имеют одинаковый отсортированный вид.