Print unique character and its count in a given string

Sudarshan Kasar
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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Sudarshan Kasar
Sudarshan Kasar

No responses yet

Write a response