需求:求出是否是「回文字符串」(正确的回文:abba、abcba),是返回true,否返回false,字符不能包含除汉字与字母之外的字符串。 思路: step1: 处理边界问题,先对字符进行正则处理,把除汉字与字母之外的字符串剔除并转成小写,形成紧密相连的字符串。 step2: 把字符串切割成数组,然后立个布尔型flag变量来做返回值。 step3: 利用 shift(数组第一位)和 pop(数组最后一位)匹对是否相等,遇到不相等则返回false。 step4: 终止条件为数组长度 <= 1则不再进行判断,因为最后剩下的字符串长度有可能是奇数1或者是偶数0。 实现:
const isPalindrome = function (s) { // 边界处理去除除汉字与字母之外的字符串并转成数组 const arr = s .replace(/[^\u4e00-\u9fa5a-zA-Z\d]/g, '') .toLowerCase() .split(''); // 立个flag,是正确回文是true,否则是false let flag = true; // 判断数组大于1,则需要对头尾弹出的字符进行判断 while (arr.length > 1) { // 判断数组头尾的字符是否相等,不相等则不是正确的回文 if (arr.shift() !== arr.pop()) { return false; } } return flag; }; console.log(isPalindrome('aabaa'));
标签:arr,false,js,有效,flag,数组,字符串,回文 From: https://www.cnblogs.com/zion0707/p/17112784.html