← Назад к вопросам
Анаграммы
1.2 Junior🔥 101 комментариев
#Основы Go
Условие
Даны две строки s и t. Верните true, если t является анаграммой s.
Анаграмма - слово, составленное из тех же букв, что и исходное слово.
Сигнатура
func isAnagram(s, t string) bool
Примеры
Вход: s = "anagram", t = "nagaram"
Выход: true
Вход: s = "rat", t = "car"
Выход: false
Ограничения
- Строки состоят только из строчных английских букв
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Анаграммы - решение
Описание
Анаграмма - слово из тех же букв, что исходное, но в другом порядке.
Решение 1: Массив (оптимальное)
func isAnagram(s, t string) bool {
if len(s) != len(t) {
return false
}
freq := [26]int{}
for i := 0; i < len(s); i++ {
freq[s[i]-'a']++
freq[t[i]-'a']--
}
for _, count := range freq {
if count != 0 {
return false
}
}
return true
}
Сложность:
- Time: O(n)
- Space: O(1) - массив всегда размера 26
Решение 2: HashMap
func isAnagramMap(s, t string) bool {
if len(s) != len(t) {
return false
}
freq := make(map[rune]int)
for _, ch := range s {
freq[ch]++
}
for _, ch := range t {
if freq[ch] == 0 {
return false
}
freq[ch]--
}
return true
}
Сложность: O(n) time, O(n) space
Решение 3: Сортировка
import "sort"
func isAnagramSort(s, t string) bool {
if len(s) != len(t) {
return false
}
rs := []rune(s)
rt := []rune(t)
sort.Slice(rs, func(i, j int) bool { return rs[i] < rs[j] })
sort.Slice(rt, func(i, j int) bool { return rt[i] < rt[j] })
return string(rs) == string(rt)
}
Сложность: O(n log n) time, O(1) space
Тестирование
func TestAnagram(t *testing.T) {
tests := []struct{
s, t string
want bool
}{
{"anagram", "nagaram", true},
{"rat", "car", false},
{"ab", "ba", true},
{"a", "a", true},
{"a", "b", false},
}
for _, tt := range tests {
if got := isAnagram(tt.s, tt.t); got != tt.want {
t.Errorf("isAnagram(%q, %q) = %v, want %v",
tt.s, tt.t, got, tt.want)
}
}
}
Best Practices
- Всегда проверяй длину - O(1) экономия
- Используй массив для фиксированного алфавита
- Ранний выход на неверных символах
- Тестируй пустые строки и одиночные буквы