# 回文
回文串就是一个正读和反读都一样的字符串,比如 level
或者 noon
等等就是回文串。
判断是否回文的通用方法是首尾双指针。 判断最长回文的思路主要是两个字"扩展",如果可以充分利用回文的特点,则可以减少很多无谓的计算,典型的是《马拉车算法》。
这里主要的考察是
reverse
的实现, 刚好 JS 的数组(注意是数组,而不是字符串)就有reverse
函数。直接利用现成的函数,将字符串转换成数组。
# 判断一个字符串是否是回文
var isPalindrome = function(s) {
// \w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
s = s.replace(/[^\w]/g, '').toLowerCase();
return (
s
.split('')
.reverse()
.join('') === s
);
};
# 回文排列
给定一个字符串,写一个函数来检查它是否是 a 的排列回文
function palindromePermutation(str) {
const newStr = str.replace(/ /g, '').toLowerCase();
const charCount = new Map();
for (let i = 0; i < newStr.length; i++) {
if (!charCount.get(newStr[i])) {
charCount.set(newStr[i], 1);
} else {
charCount.set(newStr[i], charCount.get(newStr[i]) + 1);
}
}
let flagCount = 0;
for (let i = 0; i < newStr.length; i++) {
if (charCount.get(newStr[i]) === 1) {
flagCount += 1;
}
if (flagCount === 2) {
return false;
}
}
return true;
}