先聊一下什么是回文字符串?实际上就是正序和倒序一致的字符串,正所谓“上海自来水来自海上,中山在建房建在山中”。咳咳...跑题了
理解了回文那么再来看场景,"abcba"即是一个回文字符串,而"abcdba"则非回文字符串。在算法处理后,前者应返回true,而后者则返回false
前排提示:此算法相关不区分大小写,即a与A在判定时是相等的
- 算法1
思路主要是对字符串进行正循环和逆循环,如完全一致则返回true,否则则返回false
function isPalindromicStr1 (str) {
// 判空,此时应该判为true还是false就看自己需求了,我这里是空字符串判定为true
if (!str.length) {
return true;
}
str = str.toLowerCase().split(''); //转换为小写并分割为数组
var start = 0, end = str.length - 1;
// while循环判断
while(start < end) {
//相等则修改索引继续往下比较
if (str[start] === str[end]) {
start++;
end--;
}
else {
return false;
}
}
return true;
}
- 算法2
思路和算法1类似,但循环采取递归的方式。递归结束的方式有两种,一是字符串全部比较完成,此时返回true并跳出递归,另外一种情况则是出现了不一致的比对结果,此时返回false并跳出递归。
function isPalindromicStr2 (str) {
// 判空,此时应该判为true还是false就看自己需求了,我这里是空字符串判定为true
if (!str.length) {
return true;
}
str = str.toLowerCase(); //转换为小写
let end = str.length - 1;
//出现不一致,返回false
if (str[0] !== str[end]) {
return false;
}
//删掉字符串首尾,继续进行递归
return isPalindromicStr2(str.slice(1, end));
}
- 算法3
算法3的思路是直接将字符串进行逆序处理,并且与原字符串进行比较,一致则返回true,不一致则返回false。
function isPalindromicStr3 (str) {
var arr = str.toLowerCase().split(''); //转换为小写并分割为数组
var reverseStr = arr.reverse().join(''); //数组逆序并合并为字符串
return str === reverseStr;//直接返回比较结果
}