目录
1,题目
2,代码
2.1自己完成
2.2双指针
1,题目
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
2,代码
2.1自己完成
/*** @param {string} s* @return {boolean}*/
var isPalindrome = function(s) {// 遍历过程情况// 大写字母 则转化为小写字母// 小写字母 数字 直接保留 // 非字母数字 丢掉// 先将不必要的内容进行去除let strInit = [];let index = 0;for(let i = 0;i < s.length ;i++){if(s[i]>='a' && s[i]<='z'){strInit[index++] = s[i];}else if(s[i]>='A' && s[i]<='Z'){strInit[index++] = s[i].toLowerCase();}else if(s[i]>='0' && s[i]<='9'){strInit[index++] = s[i];}}const oldString = strInit.join('');const reverseString = strInit.reverse().join('');return oldString === reverseString;};
判断字符子否为数字,只需要判断其是否在0到9之间即可,并不存在多位数的数字情况;
数组的reverse()函数是在原函数上进行操作,所以要先保留原本的数组,这里将保留原数组和转化为字符串并为一步实现;(join()函数是不改变原来数组的)
2.2双指针
/*** @param {string} s* @return {boolean}*/
var isPalindrome = function(s) {//双指针let left = 0,right = s.length - 1;while(left < right){while (left < right && !/[a-zA-Z0-9]/.test(s.charAt(left))) {left++;}while(left < right && !/[a-zA-Z0-9]/.test(s.charAt(right))){right--;}if( s.charAt(left).toLowerCase() != s.charAt(right).toLowerCase()){return false;}else{right--;left++;}}return true;};
利用正则表达式对大小字母和数字进行一个匹配筛选
var isPalindrome = function(s) { //双指针let left = 0,right = s.length - 1;while(left < right){···while(left < right && !/[a-zA-Z0-9]/.test(s.charAt(right))){right--;}···}···};