JS算法-验证回文串

简介: JS算法-验证回文串

题目


如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。


字母和数字都属于字母数字字符。


给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

输入: s = "race a car"
输出: false
解释: "raceacar" 不是回文串。


题解


第一种


我们这里接收一个参数 str。首先通过 if 判断字符串长度是否小于 2,若是则一定是回文字符串,直接返回 true。接着定义了一个匹配非数字和小写字母的正则表达式 reg,接下来将传入的字符串转为小写字母,再通过 replace 方法将非数字和小写字母的字符替换为空字符串,从而得到真正需要判断的字符串 realStr。接下来通过计算 realStr 的中间位置(若长度为奇数则为中间字符,若长度为偶数则为中间两个字符的左边一个)得到 midleIndex,并定义一个布尔值变量 result 初始化为 true。最后通过双指针比较 realStr 的首尾字符,若不相等则将 result 置为 false,并跳出循环。最终函数返回 result。

    var isPalindrome = function(str) {
      if(str.length < 2) {
          return true;
      }
      const reg = /[^0-9a-z]/g;
      const smallStr = str.toLowerCase();
      const realStr = smallStr.replace(reg, '');
      const midleIndex = parseInt(realStr.length / 2);
      let result = true;
      for(let i = 0; i < midleIndex; i++) {
          if(realStr.charAt(i) !== realStr.charAt(realStr.length - 1 - i)) {
              result = false;
              break;
          }
      }
      return result;
  };


第二种


我们先创建一个数组 res,用于存放提取出来的字母和数字,使用 for 循环遍历字符串 s 中的每一个字符,若该字符是数字、大写字母或小写字母,则将该字符添加到数组 res 中,使用数组的 reverse 方法将数组 res 反转,并使用数组的 join 方法将其转化为字符串格式,赋值给变量 str,将变量 str 中的所有字符转换成大写字母形式。,在将字符串 str 再次使用字符反转的方法进行反转,并赋值给变量 strF。最后判断变量 str 是否等于变量 strF,若相等则说明原字符串是一个回文字符串,返回 true,否则说明不是回文字符串,返回 false

  var isPalindrome = function (s) {
      let res = [];
      for (let i = 0; i < s.length; i++) {
          if (
              (48 <= s.charCodeAt(i) && s.charCodeAt(i) <= 57) ||
              (65 <= s.charCodeAt(i) && s.charCodeAt(i) <= 90) ||
              (97 <= s.charCodeAt(i) && s.charCodeAt(i) <= 122)
          ) {
              res.push(s[i]);
          }
      }
      let str = res.reverse().join("");
      str = str.toUpperCase();
      let strF = str.split("").reverse().join("");
      return str == strF;
  };
相关文章
|
28天前
|
算法 JavaScript 前端开发
LZH 算法的模拟实现,JavaScript 版本
LZH 算法的模拟实现,JavaScript 版本
12 0
|
2月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
2月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
23 0
|
2天前
|
JavaScript 前端开发 算法
【JavaScript技术专栏】使用JavaScript实现常见算法
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现常见算法,包括排序、搜索和图算法。首先,通过JavaScript的`sort`方法讨论了排序算法,以快速排序为例展示了自定义排序的实现。接着,探讨了二分查找这一高效的搜索算法,并提供了实现代码。最后,解释了深度优先搜索(DFS)图算法,并给出了在JavaScript中的实现。理解并运用这些算法能有效提升编程能力。
|
2天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
16天前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。
|
2月前
|
存储 算法 算法框架/工具
基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序
该文档介绍了在一个FPGA项目中使用HSV色彩模型提取图像深度信息的过程。通过将RGB图像转换为HSV,然后利用明度与深度的非线性映射估计深度。软件版本为Vivado 2019.2和MATLAB 2022a。算法在MATLAB中进行了对比测试,并在FPGA上实现了优化,包括流水线并行处理和查找表技术。提供的Verilog代码段展示了RGB到灰度的转换。实验结果和核心程序的图片未显示。
|
2月前
|
算法 JavaScript 前端开发
游戏物理系统 - 如何在JavaScript中实现基本的碰撞检测算法?
在JavaScript中实现2D矩形碰撞检测,常用AABB方法,适合简单游戏。创建Rectangle类,包含位置和尺寸属性,并定义`collidesWith`方法检查两矩形是否相交。通过比较边界位置判断碰撞,当四条边界条件均满足时,认定发生碰撞。基础算法适用于初级需求,复杂场景可采用更高级的碰撞检测库。
13 1
|
2月前
|
缓存 JavaScript 算法
Vue.js中的diff算法:让虚拟DOM更高效
Vue.js中的diff算法:让虚拟DOM更高效
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。