如何创建重复的字母字符串?

时间:2015-08-27 21:20:21

标签: go

如何创建一串字母字符串,以便第一个字符串是" a",第26个是" z",第27个是" aa" .. ..eg:

a
b
c
d
...
...
...
x
y
z
aa
ab
ac
ad
...
...
...
ax
ay
az
aaa
aab
aac
...
...
...
aax
aay    
aaz
aaaa
aaab
...
...

I have the following playground code,但是27号是" za" (s / b" aa")。我希望最终能够使用该模式创建一个无限长的字符串。

1 个答案:

答案 0 :(得分:0)

我没有使用你的代码,而是重新编写了一个更简单的算法来做到这一点; https://play.golang.org/p/Iv6X8-SXY3

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}

    prefix := "a"
    for i := 0; i < 5; i++ {
        for i, _ := range letters {
            letters = append(letters, prefix+letters[i%26])
        }
        prefix += "a"
    }   

    for j, _ := range letters {
         fmt.Println(letters[j])
    }
}

你也可以扩展这个,所以有一个变体前缀来获得像ba,bc,bd,bba等的东西。要做到这一点,您需要更改外部循环以使用字母中的现有项目,而不是静态计算仅由“a”组成的前缀。要增加字符串的长度,只需在外循环上使i更大。你也可以将它包装在一个函数中并使它成为一个参数。最后,如果性能是一个问题,我建议你的切片具有较大的初始容量,因为这是自由使用append会导致很多或realloc的。