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;
  };
相关文章
|
10月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
334 9
|
10月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
464 3
|
10月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
423 1
|
11月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
541 3
|
10月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
802 0
|
10月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
503 2
|
11月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
329 6
|
11月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
409 3
|
10月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
421 8
|
10月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
474 8

热门文章

最新文章