Print unique character and its count in a given string
1 min readFeb 13, 2024
object CharectersWithItsCountInaString extends App {
println("***************")
case class CharWithNumber(char: Char, count: Int)
var acc: Seq[CharWithNumber] = Nil
val inputString1 = "sudarshan kasar".toCharArray.toSeq map (char =>
acc.filter(_.char == char).headOption match {
case Some(charWithNumber) => acc = acc.filterNot(_.char == char) :+ CharWithNumber(char, charWithNumber.count + 1)
case None => acc = acc :+ CharWithNumber(char, 1)
}
)
acc map println
@tailrec
def charWithCount(charSeq: Seq[Char], acc: Seq[CharWithNumber] = Seq.empty[CharWithNumber]): Seq[CharWithNumber] = {
val charI = charSeq.head
val accumulatedCharOption = acc.find(_.char == charI)
if (charSeq.size == 1) {
accumulatedCharOption match {
case Some(charWithNumber) => acc.filterNot(_.char == charI) :+ CharWithNumber(charI, charWithNumber.count + 1)
case None => acc :+ CharWithNumber(charI, 1)
}
} else {
//val accumulatedCharOption = acc.filter(_.char == charI).headOption
accumulatedCharOption match {
case Some(charWithNumber: CharWithNumber) => charWithCount(charSeq.tail,
acc.filterNot(_.char == charI) :+ CharWithNumber(charI, charWithNumber.count + 1))
case None => charWithCount(charSeq.tail, acc :+ CharWithNumber(charI, 1))
}
}
}
println("****************************8")
charWithCount("sudarshan kasar".toCharArray.toSeq) map println
}
#Scala #tailrec @tailrec #tailrecursion #problemsolving