携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第32天,点击查看活动详情
1. 引言
接下来继续下一题开展对应leetcode 习题课中初级算法题目的练习,这个就当我的学习笔记了,大家一起交流,让我们一起学习变得更好吧! 官网地址:leetcode.cn/leetbook/re…
2. 题型
1.验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是回文串,返回 true ;否则,返回 false 。
示例1:
输入: "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。
示例2:
输入:"race a car"
输出:false
解释:"raceacar" 不是回文串。
示例3:
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。
提示:
1 <= s.length <= 2 * 105
s 仅由可打印的 ASCII 字符组成
思路:
首先,回文串指的是字符串去除空格,非字面和数字后,字符串从中轴线开始收尾字符相等的字符串;那么当我们开始解题时我们需要先把字符串中的数字和非字面和空格通过正则表达式去除后,再把所得字符串字符改成全部大写或者小学,这样我们就可以开始对比;接着定义两个指针值分别是起始点和字符串末位置;依次从首部和末尾开始循环对比,当发现存在不匹配不相等的字符时跳出循环,返回false;否则为true,结束。
该题考查的是我们对回文串的了解,接下来之后的试题才是重点,让我们拭目以待。
解答:
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
s=s.replace(/[^a-zA-Z0-9]/g,"").replace(/\s/g,"").toLowerCase();
let i=0,j=s.length-1;
while(i<j){
if(s[i]!=s[j]){
return false;
}
i++;
j--;
}
return true;
};