理解Javascript中有效回文的解决方案
这是来自LeetCode的有效回文 给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写 注意:为了解决这个问题,我们将空字符串定义为有效回文 而正则表达式测试[开始]{ 开始+++;} ->无法理解它是如何工作的,我只知道s[start]是字母数字字符,它将是错误的 如果!s[开始]| |!(完) ->这是什么意思 下面是整个代码理解Javascript中有效回文的解决方案,javascript,string,palindrome,Javascript,String,Palindrome,这是来自LeetCode的有效回文 给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写 注意:为了解决这个问题,我们将空字符串定义为有效回文 而正则表达式测试[开始]{ 开始+++;} ->无法理解它是如何工作的,我只知道s[start]是字母数字字符,它将是错误的 如果!s[开始]| |!(完) ->这是什么意思 下面是整个代码 var isPalindrome = function(s) { let regex = /[\W]/; let start = 0;
var isPalindrome = function(s) {
let regex = /[\W]/;
let start = 0;
let end = s.length - 1;
while (start < end) {
// Moves front runner to next alphanumeric
while (regex.test(s[start])) {
start++;
}
// Moves back runner to next alphanumeric
while (regex.test(s[end])) {
end--;
}
// Above would run until null if there are no alphanumeric characters so return true
if (!s[start] || !s[end]) {
return true;
}
// Check if equal and return false if not
if (s[start].toLowerCase() != s[end].toLowerCase()) {
return false;
}
// If index values match continue the while loop
start++;
end--;
}
return true;
};
请告知 这是严重的过度设计。为什么不使用一个for循环和两个计数器,一个从0开始,另一个在最后一个索引处,当它们不相等时,检查这些索引处的字符是否相同。或者使用内置函数,如
function palindrome(str){ return str.split('').reverse().join('') == str}
与以前的解决方案相同,另外: +删除空格和符号(A-Z、A-Z、0-9除外) +小写
const isPalindrome = function(str) {
const expr = /[\W_]/g;
const lowcaseStr = str.toLowerCase().replace(expr, '');
const reverseStr = lowcaseStr.split('').reverse().join('');
return lowcaseStr === reverseStr
};
理解此代码或任何代码的一个好方法是逐步完成它。既然你有了代码,你就可以将它弹出到调试器中并进行测试。上面的每个语句的注释都准确地解释了它们的作用。