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

发布于:2024-04-03 ⋅ 阅读:(151) ⋅ 点赞:(0)

目录

1,题目

2,代码

2.1自己完成

2.2双指针


1,题目

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

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

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

2,代码

2.1自己完成

/**
 * @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双指针

/**
 * @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;

};

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


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--;
    }
   ···
   
   }
  ···

};


网站公告

今日签到

点亮在社区的每一天
去签到