最近在刷LeetCode,本博文连接:https://leetcode.com/problems/valid-palindrome/
题目如下:
解答:在提交了N多次之后,终于被Accepted。
总结:发现自己考虑的太不周全了。
1、最初时传进来的str是一个静态变量,不能进行大小写转换,后来加进了str1,str2暂存。
2、再是没有考虑空白字符串
3、考虑的停用符不够。
代码:
var isPalindrome = function (str) { this.str = str; var stopWords = /[\s\,\.\!\?\:\;\@\#\$\%\^\&\*\(\)\-\+\+\_\~\`\\'\\"\[\]\{\}\/\<\>\|\||\……\¥\\]/<span style="font-family: Arial, Helvetica, sans-serif;">;</span><span style="font-family: Arial, Helvetica, sans-serif;">//匹配字符,以便后面比较时跳过使用</span>
//var isPr = str.concat(" is a palindrome."); //var notPr = str.concat(" is not a palindrome."); //考虑空字符串时的情况 if (/^[\s*]$/.test(str)) { if (str.length === 1) return true; else if (str.length % 2 === 0) return isPr; //return true; else return notPr; //return false; } //非空字符串情况 while (i <= j) { if (stopWords.test(str[i])) {//若i是stopWords里的符号时,跳过 i++; } if (stopWords.test(str[j])) {//若j是stopWords里的符号时,跳过 j--; } if (!stopWords.test(str[i]) && !stopWords.test(str[j])) {//进行比较 var str1, str2; if (/[A-Z]/.test(str[i])) {//如果str[i]为大写字母,则转换成小写 str1 = str[i].toLowerCase(); } else { str1 = str[i]; } if (/[A-Z]/.test(str[j])) {//如果str[j]为大写字母,则转换成小写 str2 = str[j].toLowerCase(); } else { str2 = str[j]; } if (str1 === str2) {//转换后的字符进行比较 i++; j--; }else {break; } } } if (i > j) //return isPr; return true; else //return notPr; return false; };
完毕。
原文地址:http://blog.csdn.net/tto_ott/article/details/44837797