首页 > 解决方案 > 带有forloop的scala回文函数

问题描述

想知道Java回文函数的Scala等价物,用多个变量编写forloop在scala中很棘手

class Solution {
  public boolean isPalindrome(String s) {
    for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
      while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
        i++;
      }
      while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
        j--;
      }

      if (i < j && Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
        return false;
    }

    return true;
  }
}

我能够在 scala 中为回文编写代码,但在上述解决方案中空间复杂度为 O(1),而下面的则为 O(N)

def Ispalindrome(inpt:Option[String]):Boolean ={
  inpt match {
      case Some(inpt)=> {
        val sLetters=inpt.toLowerCase().filter(c=>c.isLetterOrDigit)
        (sLetters==sLetters.reverse)
      }
      case None => false
      }
    }

标签: javascalapalindrome

解决方案


那这个呢?

def isPalindrome(str: String): Boolean = {
  val len = str.length - 1

  @annotation.tailrec
  def loop(i: Int): Boolean = {
    val j = len - i
    if (i >= j) true
    else {
      if (str(i).toLower != str(j).toLower) false
      else loop(i + 1)
    }
  }

  loop(i = 0)
}

我省略了预处理部分,但您可以根据需要添加。


推荐阅读