java - 带有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
}
}
解决方案
那这个呢?
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)
}
我省略了预处理部分,但您可以根据需要添加。
推荐阅读
- android - 我在安装 andriod studio 时总是看到这个错误信息
- oracle - 如果工作表具有某些连接,sqldeveloper 中是否有一种视觉指示器?
- gdal - ogr2ogr 在子目录(.pbf 文件)中正确创建 Mapbox 矢量切片,在 SQLite .MBTILES 文件中创建错误
- javascript - 使用 sanity cms 的特定帖子
- node.js - npx create-react-app -> 引擎“节点”与此模块不兼容。预期版本 ">= 10.x"。得到“8.16.0”——Arch Linux
- python - Bluez/Python 缓冲导致蓝牙连接延迟
- cuda - 难以使用 atomicMin 在矩阵中找到最小值
- javascript - 用空合并缩短三元
- python - 如何用 ppid = 1 杀死僵尸进程?
- python-3.x - 在 Union 中处理具有值的参数的 Pythonic 方式