我一直在尝试在wikipedia上重新创建 Burrows-Wheeler 变换的示例。为了增加乐趣,我试图通过递归策略来做到这一点。但是,我陷入了第一步,创建了字符串的所有旋转。这是我的代码:
object SimpleBW extends App {
val string = "^BANANA|"
val list = tranformStringStart(string)
list.foreach(println)
def tranformStringStart(string: String): List[String] = { transformString(string, string.length) }
def transformString(string: String, splitIndex: Int): List[String] = {
if (splitIndex == 0) {
// Recursion base case
Nil
} else {
val (firstString, secondString) = string.splitAt(splitIndex)
val newString = secondString + firstString
newString :: transformString(secondString + firstString, splitIndex - 1)
}
}
}
这会生成以下输出:
^BANANA|
|^BANANA
NA|^BANA
ANANA|^B
A|^BANAN
BANANA|^
NANA|^BA
ANA|^BAN
这类似于维基百科的例子,但不完全相同,我似乎无法弄清楚为什么。根据示例,输出应如下所示:
^BANANA|
|^BANANA
A|^BANAN
NA|^BANA
ANA|^BAN
NANA|^BA
ANANA|^B
BANANA|^
我已经盯着这个有一段时间了,虽然问题应该是相当直接的,但我似乎无法弄清楚。你能看出我做错了什么吗?