假设我有一个N
符号的字母表,并希望在此字母表中枚举长度为M
的所有不同字符串。 Scala是否为此提供了任何标准库函数?
答案 0 :(得分:3)
从another answer获取灵感:
val letters = Seq("a", "b", "c")
val n = 3
Iterable.fill(n)(letters) reduceLeft { (a, b) =>
for(a<-a;b<-b) yield a+b
}
Seq[java.lang.String] = List(aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc)
使用字符串以外的其他内容:
val letters = Seq(1, 2, 3)
Iterable.fill(n)(letters).foldLeft(List(List[Int]())) { (a, b) =>
for (a<-a;b<-b) yield(b::a)
}
对额外类型注释的需求有点烦人但没有它就行不通(除非有人知道另一种方式)。
答案 1 :(得分:2)
另一种解决方案:
val alph = List("a", "b", "c")
val n = 3
alph.flatMap(List.fill(alph.size)(_))
.combinations(n)
.flatMap(_.permutations).toList
更新:如果您想在输出中获取字符串列表,那么alph
应为字符串。
val alph = "abcd"