前端算法(74)

简介: 前端算法(74)

题目

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

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

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

输入: s = " "
输出: true
解释: 在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

题目解析

思路一

我们先用正则表达式匹配出所有不是数字和字母的字符并将他们替换为空串,在用while循环将头和尾同时遍历判断是否字符正确,由于我们不区分大小写字母、但是其大小写Ascii码值相差32,所以可以用来作判断,由于0PAscii码值刚好相差32并且不为回文串,所以可以放在函数首行判断返回false。

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  if(s == "0P"){
    return false;
  }
  const reg = /[^A-Za-z0-9]+/g;
  s = s.replace(reg,"");
  let num1=0,num2=s.length-1;
  while(num2>=0){
    let Ascii1 = s.charCodeAt(num1++);
    let Ascii2 = s.charCodeAt(num2--);
    if(Ascii1 != Ascii2 && Math.abs(Ascii1-Ascii2)!=32){
      return false;
    }
  }
  return true;
};

思路二

var isNumberOrStr = (str)=>{
        //判断这个字符是否是数字
        let isNum =  /[0-9]/.test(Number(str));
        //判断这个字符是否是字母
        let isStr = /[a-zA-Z]/.test(String(str));
        if(isNum || isStr){
            return true;
        }
        return false;
    }
var isPalindrome = function(s) {
        //新建一个空字符串名为sb
        var sb = "";
        for(let i=0;i<s.length;i++){
            //取得每一个字符
            let char = s.charAt(i);
            //判断当前字符是数字或者是字母
            if(isNumberOrStr(char)){
                 //去掉空格,空格不能有的
                char = char.replace(/\s+/g,'');
                 //将满足条件的字符,再转为小写字母,添加到sb里
                sb += String.prototype.toLowerCase.call(char);
            }
        }
        //新建一个字符串sb2为字符串sb的拷贝
        var sb2 = sb.concat();
        //反转sb2,先split再reverse最后join连接
        sb2 = sb2.split("").reverse().join("");
        return sb === sb2;
};


相关文章
|
7天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
13 1
|
7天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
12 0
|
7天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
11 0
|
7天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
9 1
|
7天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
6 1
|
7天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
10 1
|
7天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
7天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
9 0
|
7天前
|
算法 前端开发 搜索推荐
前端算法之选择排序
前端算法之选择排序
11 0
|
14天前
|
JavaScript 算法 前端开发
【专栏】前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式
【4月更文挑战第29天】本文探讨了前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式。slot算法允许在组件中定义插槽位置,实现内容的灵活插入和复用,提高代码可读性和维护性。shadow DOM则通过封装DOM子树,实现样式和事件的隔离,增强组件独立性和安全性。这两种技术常应用于组件开发、页面布局和主题定制,但也面临兼容性、学习曲线和性能优化等挑战。理解并掌握它们能提升开发效率和用户体验。