首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找字符串中的所有模式索引?

查找字符串中的所有模式索引?
EN

Stack Overflow用户
提问于 2013-11-08 12:00:08
回答 4查看 3.1K关注 0票数 1

下面是我的代码,它看起来很难看,因为它使用了两个vars。

代码语言:javascript
复制
  def patternMatching(pattern: String, genome: String): List[Int] = {
    assert(pattern.length < genome.length)
    var curr = 0
    var r = List[Int]()
    while (curr != -1) {
      curr = genome.indexOf(pattern, curr)
      if (curr != -1) {
        r ::= curr
        curr += 1
      }
    }
    r.reverse
  }

你是如何用一种实用的方式写这个的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-08 18:51:56

这是相当曲折的:

代码语言:javascript
复制
0.until(genome.length).filter(genome.startsWith(pattern, _))
票数 10
EN

Stack Overflow用户

发布于 2013-11-08 12:18:15

您可以使用来自unfoldscalaz方法,如下所示:

代码语言:javascript
复制
import scalaz._, Scalaz._

def patternIndexes(pattern: String, genome: String) = unfold(0){
  genome.indexOf(pattern, _) match {
    case -1 => None
    case n => (n, n+1).some
  }
}

用法:

代码语言:javascript
复制
scala> patternIndexes("a", "aba").toList
res0: List[Int] = List(0, 2)
票数 2
EN

Stack Overflow用户

发布于 2018-02-23 09:31:38

有一个简单得多的惯用Scala解决方案,它不需要在每个位置显式应用模式或使用第三方库:

代码语言:javascript
复制
def patternMatching(pattern: String, genome: String): List[Int] =
  pattern.r.findAllMatchIn(genome).map(_.start).toList
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19858630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档