最近在刷LeetCode,本博文题目连接:
题目如下:
解答:在提交了N多次之后,终于被Accepted。
总结:发现自己考虑的太不周全了。
1、最初时传进来的str是一个静态变量,不能进行大小写转换,后来加进了str1,str2暂存。
2、再是没有考虑空白字符串
3、考虑的停用符不够。
代码:
var isPalindrome = function (str) {
this.str = str;
var stopWords = /[\s\,\.\!\?\:\;\@\#\$\%\^\&\*\(\)\-\+\+\_\~\`\\'\\"\[\]\{\}\/\<\>\|\||\……\¥\\]/;//匹配字符,以便后面比较时跳过使用
//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;
};
结果展示:
完毕。