「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
题目描述:
标签:字符串
难度:简单
描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例2:
输入: "race a car"
输出: false
题解
题目理解
考察点:
- 正则匹配
- 字符串反转
- 对称特性
解法一:正则匹配
解题思路
- 核心思路:s.replace(/[^0-9a-zA-Z]/g, '')
代码
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
const pureS = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
const reverseS = pureS.split('').reverse().join('');
return pureS == reverseS;
};
算法分析
解法二:对称性、双指针
解题思路
- 核心思路:s[i] = s[len - 1 - i]
代码
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
const pureS = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
const len = pureS.length;
let isValid = true;
for(let i = 0; i < len/2; i++) {
if (pureS[i] !== pureS[len - 1 - i]) {
isValid = false;
}
}
return isValid;
};
算法分析
总结
- 回文字符串:正序和倒序都相同的字符串。
- 字符串基本算法:反转
- 回文字符串特性:对称性
- 回文字符串算法:双指针