Как определить повторение буквы в строке на языке Golang

Функция должна определить есть ли повторяющиеся буквы (английские) без учета регистра в строке. Язык Golang.

Мой код:

func IsIsogram(word string) bool {
   return regexp.MatchString(`([a-z]).*\1`, word.toLowerCase())
}

Компилятор ругается на регулярное выражение. Не пойму почему, ведь оно составлено верно.


Ответы (2 шт):

Автор решения: Alex R.

Так как Golang не поддерживает обратных ссылок (которые используются в представленном регулярном выражении \1), то в ответе с SO предлагают использовать golang-pkg-pcre, с более полной поддержкой регулярных выражений.


Просто регулярное выражение для поиска повторяющихся букв (от двух) с использованием обратной ссылки на группу

(.)\1+
→ Ссылка
Автор решения: Jegors Čemisovs

В текущей (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
}
→ Ссылка