Scala中的强制字符串匹配

时间:2013-11-30 09:29:34

标签: algorithm scala

我是Scala的新手并且在练习中我正在尝试编写可以返回匹配索引列表的强制字符串匹配函数。我拥有的最好的是贴在下面。我很欣赏这种惯用语的帮助。另外你会注意到这只是打印索引,而我更喜欢List或Stream。

def strMatching(txt: String, pat: String): Unit = {
        val N = txt.length
        val M = pat.length
        for (i <- 1 to N-M) {
            var j = 0
            while (j < M && pat(j) == txt(i+j)) {
                if (j == M-1) print(s"${i+1} ")
                j = j + 1
            }
        }
    }

非常感谢!

2 个答案:

答案 0 :(得分:3)

使用强力算法的可能的一个班轮可以是

txt.indices.filter(i => txt.substring(i).startsWith(pat))

答案 1 :(得分:1)

def strMatch(txt: String, pat: String): List[Int] = {

     var index = 0;
     var indices = List.empty[Int]

     // sliding gives a sliding window of given length
     txt sliding pat.length foreach { x => 
                                      if (pat == x) indices = indices :+ index
                                      index += 1 }

     indices
}