首页 > 解决方案 > 查找包含最多“a”字母的字符串

问题描述

我有一个问题,如果我能以某种方式缩短我的代码 - 我需要找到我的列表中的哪些字符串包含最多的 'a' 字母。我做了如下,但我几乎可以肯定我可以做得更短,但我不知道怎么做。所以首先我将我的列表映射到元组,在那里我有(el, num)多少num'a'包含(使用foldLeft)。然后我使用maxBy所以我取一个具有最多'a'字母的元素,然后过滤num==的所有元素res2._2(因为可能有多个元素具有相同数量的'a'字母,所以我不能停在maxBy

我的代码:

 def mostA(l: List[String]): List[String] = {

    val res = l.map( string => (string, string.foldLeft(0)((acc,b) => if (b == 'a') acc + 1 else acc)))
    val res2 = res.maxBy(x => x._2)
    val res3 = res.filter(x => x._2 == res2._2).map{case (str, num) => str}
    res3

  }

标签: scalafunctional-programming

解决方案


稍加努力,您就可以一口气完成:

    l.foldLeft(List[String] -> 0) { case ((strs, max), s) => 
       val n = s.count(_ == letter)
       if (n == max) (s::strs, max) else if (n > max) (s::Nil, n) else (strs, max)
    }._1.reverse

推荐阅读