我知道找到变位词的理论,可以在这里看到。对于我的目的,我需要找到从一个单词中能够找到的变位词数量不包括重复的。
允许有重复的情况下,这是相当简单的。
aab
有以下变位词:
aab
aab
aba
aba
baa
baa
这个值可以通过计算字母数量的 阶乘 得出
factorial := 1
for i := len(word); i > 0; i-- {
factorial = i * factorial
}
// aab -> 6
然而,如果你希望排除重复项,那么可能会将潜在的变位词从6个减少到3个。例如,单词hello
有120种组合方式,但是去掉重复后只有60种。
我编写了自己的算法,制作了一个字母映射,并返回了该映射的长度,但这也存在问题。
hello -> 24 (actually 60)
helllo -> 24 (actually 120)
我该如何做到这一点?
hello
有60个不重复的字谜。helo
有24个,所以肯定hello
更多。 - user3386109