Как определить повторение буквы в строке на языке Golang
Функция должна определить есть ли повторяющиеся буквы (английские) без учета регистра в строке. Язык Golang.
Мой код:
func IsIsogram(word string) bool {
return regexp.MatchString(`([a-z]).*\1`, word.toLowerCase())
}
Компилятор ругается на регулярное выражение. Не пойму почему, ведь оно составлено верно.
Ответы (2 шт):
Так как Golang не поддерживает обратных ссылок (которые используются в представленном регулярном выражении \1), то в ответе с SO предлагают использовать golang-pkg-pcre, с более полной поддержкой регулярных выражений.
Просто регулярное выражение для поиска повторяющихся букв (от двух) с использованием обратной ссылки на группу
(.)\1+
В текущей (1.14) версии языка Go отсутствует поддержка многих возможностей в регулярных выражениях, в том числе, обратная ссылка на группы.
Задача решена так:
package isogram
import (
"strings"
"unicode"
)
// IsIsogram determines if a word or phrase is an isogram.
func IsIsogram(word string) bool {
var bitset uint32 = 0
for _, c := range strings.ToLower(word) {
if unicode.IsLetter(c) {
if index := c - 'a'; bitset&(1<<index) == 0 {
bitset |= 1 << index
} else {
return false
}
}
}
return true
}