力扣刷题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--;
    }
   ···
   
   }
  ···

};
相关推荐
deli0071 小时前
2GB 文件传一半断网实测:HTTP 断点续传只补 15MB
前端
小雉系统9 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
金銀銅鐵9 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
吴名氏.11 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
.痞老板.11 小时前
java ee--多线程(进阶)
java·java-ee
Pniubi12 小时前
关于算法用现成数据结构和手撕
数据结构
treasure14012 小时前
【复古】浅尝Django前后端不分离
前端·css·python·django·bootstrap·html·web
深入云栈13 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
唐墨12313 小时前
linux kernel 比较数据大小的宏定义
linux·算法