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;
  };
相关文章
|
4月前
|
移动开发 JavaScript 前端开发
JavaScript:验证输入
【9月更文挑战第02天】
48 6
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
33 12
|
5天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
20 7
|
3天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
16 3
|
4月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
3月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
5月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
4月前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
39 2
|
5月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
68 1
|
11天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80