力扣刷题Days31-第二题-125.验证回文串(js)

目录

1,题目

2,代码

2.1自己完成

2.2双指针


1,题目

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

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

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

2,代码

2.1自己完成

javascript 复制代码
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    // 遍历过程情况
        // 大写字母 则转化为小写字母
        // 小写字母 数字 直接保留 
        // 非字母数字  丢掉

    // 先将不必要的内容进行去除
    let strInit = [];
    let index = 0;
    for(let i = 0;i < s.length ;i++){
        if(s[i]>='a' && s[i]<='z'){
            strInit[index++] = s[i];
        }else if(s[i]>='A' && s[i]<='Z'){
            strInit[index++] = s[i].toLowerCase();
        }else if(s[i]>='0' && s[i]<='9')
        {
            strInit[index++] = s[i];
        }
    }
    const oldString = strInit.join('');
    const reverseString = strInit.reverse().join('');

    return oldString === reverseString;

};

判断字符子否为数字,只需要判断其是否在0到9之间即可,并不存在多位数的数字情况;

数组的reverse()函数是在原函数上进行操作,所以要先保留原本的数组,这里将保留原数组和转化为字符串并为一步实现;(join()函数是不改变原来数组的)

2.2双指针

javascript 复制代码
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
   //双指针
   let left = 0,right = s.length - 1;
   while(left < right){
   while (left < right && !/[a-zA-Z0-9]/.test(s.charAt(left))) {
            left++;
    }
    while(left < right && !/[a-zA-Z0-9]/.test(s.charAt(right))){
        right--;
    }

    if( s.charAt(left).toLowerCase() !=  s.charAt(right).toLowerCase()){
        return false;
    }else{
        right--;
        left++;
    }
   }
   return true;

};

利用正则表达式对大小字母和数字进行一个匹配筛选

javascript 复制代码
var isPalindrome = function(s) { 
   //双指针
   let left = 0,right = s.length - 1;
   while(left < right){
   ···
    while(left < right && !/[a-zA-Z0-9]/.test(s.charAt(right))){
        right--;
    }
   ···
   
   }
  ···

};
相关推荐
To_OC4 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus5 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮5 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635076 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
小Ti客栈6 小时前
Spring Boot 集成 Springdoc-OpenAPI 与 Knife4j实现接口文档与可视化调试
java·spring boot·后端
徐小夕7 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
Ai拆代码的曹操7 小时前
Spring 事务 REQUIRES_NEW 嵌套调用:连接池翻倍的秘密
java·后端·spring
a1117767 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
动恰客流统计8 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能