Find the most frequent character in a string
Instead of reversing the input string you could foldRight over it, and instead of updating mutable variables let the fold accumulator carry the current data forward. As an Array is mutable by default there's no point in having the fold accumulator make copies in order to carry it forward.

def findMaxFunctional(word: String): Char = {
  val arr = new Array[Int](128)
  word.foldRight((' ', 0)){
    case (c, (mxChr, mxCnt)) =&gt;
      arr(c) += 1
      if (arr(c) &gt;= mxCnt) (c, arr(c))
      else (mxChr, mxCnt)
  }._1
}