Advertisement
Guest User

Untitled

a guest
May 28th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. val input = "abccaaaba" // cccaaaba -> ccbaaba -> caaaba -> baaba -> caba -> bba -> bc -> a
  2.  
  3. val distinctChars = input.distinct.sorted.toList
  4.  
  5. @tailrec
  6. def reduceString(acc: List[Char], seq: List[Char]): List[Char] = seq match {
  7. case Nil =>
  8. if (acc.toSet.size == 1) acc
  9. else reduceString(List.empty[Char], acc)
  10. case x :: Nil =>
  11. reduceString(acc :+ x, List.empty[Char])
  12. case x :: xs =>
  13. if (x != xs.head)
  14. reduceString(
  15. acc,
  16. distinctChars.diff(
  17. Seq(x, xs.headOption.getOrElse(List.empty[Char]))
  18. ) ++ Option(xs.tail).getOrElse(List.empty[Char])
  19. )
  20. else
  21. reduceString(x :: acc, xs)
  22. }
  23.  
  24. println(reduceString(List.empty[Char], input.toCharArray.toList))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement