В качестве альтернативы вы можете создать функцию, в которой вы можете указать свою строку и список символов, и использовать рекурсивный подход, при котором вы можете взять последовательные символы из списка, используя takeWhile
.
, а затем удалитьиз списка, используя длину результата из takewhile, и добавьте в аккумулятор то, что вы хотите объединить, в строку acc
, которая будет возвращена, когда список будет пустым.
def countSimilar(str: String, ch: List[Char]): String = {
def process(l: List[Char], acc: String = ""): String = {
l match {
case Nil => acc
case h :: _ =>
val tw = l.takeWhile(_ == h)
acc + process(
l.drop(tw.length),
if (ch.contains(h)) h + tw.length.toString else tw.mkString("")
)
}
}
process(str.toList)
}
println(countSimilar("aaaabbbcccss", List('a', 'b')))
println(countSimilar("aaaabbbcccssaaaabb", List('a', 'b', 'c')))
Это дастВы:
a4b3cccss
a4b3c3ssa4b2
См. Scala демо