首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回文算法中的Javascript匹配函数问题

回文算法中的Javascript匹配函数问题
EN

Stack Overflow用户
提问于 2021-04-26 02:49:15
回答 1查看 50关注 0票数 1

我正在写一个简单的算法来检查一个字符串是否是javascript中的回文。这就是我到目前为止所知道的:

代码语言:javascript
复制
var isPalindrome = function(s) {
    let i=0;
    let j=s.length-1;
    while (i < s.length && j >= 0) {
        while (s[i].toLowerCase().match('[a-z0-9].') === false && i < s.length) {
            i++;
        }
        while (s[j].toLowerCase().match('[a-z0-9].') === false && j >= 0) {
            j--;
        }
        if ((s[i].toLowerCase()) !== (s[j].toLowerCase())) {
            console.log(s[i].toLowerCase());
            console.log(s[j].toLowerCase());
            return false
        } else {
            i++;
            j--;
        }
    }
    return true;
};

期望的输入可以包括非字母数字字符,例如‘“;/,或空格,但它们将被忽略。例如,

“一个人,一个计划,一条运河:巴拿马”

应该返回true,因为一旦字符串去掉了任何空格和标点符号等,它就是一个有效的回文类型。我的问题是,当我在此示例输入上运行此代码时,上面if循环中的console.log语句会打印出来:

代码语言:javascript
复制
[whitepsace (a blank line)]
m

在第一个while循环中指示语句si.toLowerCase().match(‘a-z0-9’)当si为空格时返回true,导致函数错误地返回false,这对我来说没有任何意义,因为我的正则表达式在其字符类中不包含空格。为什么这条语句对空格字符返回true?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-26 03:01:16

即使您更正了正则表达式(通过删除点),内部while循环也可能会退出,因为您到达了数组的末尾,从而在随后的if比较中留下了超出范围的索引引用。

最好只删除非字母数字的字符,并在开始循环之前将所有字符都转换为小写。此外,当i跨越j时,您可以停止外部循环

代码语言:javascript
复制
var isPalindrome = function(s) {
    s = s.toLowerCase().replace(/[^a-z\d]/g, "");
    for (let i = 0, j = s.length - 1; i < j; i++, j--) {
        if (s[i] !== s[j]) {
            console.log(s[i], s[j]);
            return false;
        }
    }
    return true;
};

console.log(isPalindrome("A man, a plan, a canal: Panama"));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67257099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档