回文检查器

Posted arduka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文检查器相关的知识,希望对你有一定的参考价值。

最近在刷 freeCodeCamp 上面的题目,遂想着把一些 js 的题目记录下来。

原题:

javascript Algorithms and Data Structures Projects: Palindrome Checker

Return true if the given string is a palindrome. Otherwise, return false.

A palindrome is a word or sentence that‘s spelled the same way both forward and backward, ignoring punctuation, case, and spacing.

Note:
You‘ll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes.

We‘ll pass strings with varying formats, such as "racecar", "RaceCar", and "race CAR" among others.

We‘ll also pass strings with special symbols, such as "2A3*3a2", "2A3 3a2", and "2_A3*3#A2".

翻译一下:

回文检查器

如果给定的字符串是回文就返回 true ,否则返回 false

回文是指单词或者句子从前向后读和从后向前读是一样的,可以忽略标点符号,大小写和空格。

注意
您需要删除所有非字母数字字符(标点,空格和符号),并将所有内容都转换为相同的大小写(小写或大写),以便检查回文。

我们将测试不同格式的字符串,如"racecar""RaceCar""race CAR"等。

我们也将测试带有特殊符号的字符串,如"2A3*3a2""2A3 3a2""2_A3*3#A2"等。

代码

function palindrome(str) {

    var arr = str.match(/[0-9a-z]/gi).map(item => item.toLowerCase());

    var middleIndex = Math.ceil((arr.length - 1) / 2);

    for (let i = 0; i < middleIndex; i++) {
        if (arr[i] != arr[arr.length - 1 - i]) {
            return false;
        }
    }

    return true;
}

题外话

英语中回文经典语句

关于回文,还有很多有意思的句子。

Able was I ere I saw Elba.

这是拿破仑一世被流放到厄尔巴岛时说的一句话,我觉得有意境的一个中文翻译是:

落败孤岛孤败落 ——(马红军《翻译批评散论》)

Live on, Time, emit no evil.

这句话是在美国《时代》周刊的一封读者来信中发现的,被评为最佳回文。网上没有找到符合格式的中文翻译,我尝试着翻译了一下:

尔善言,言善尔。(你多善言,毕得善终)

见笑,自己想的,不知道对不对。

数学中也有回文

111,111,111 * 111,111,111 = 12345678987654321

还有年份,1991,2002,不妨可以私称为回文年,哈哈。小伙伴们聪明的脑瓜还能想到哪些回文公式呢?

汉语回文诗

我们五千年的中华文化博大精深,哈哈,自然有很多精彩的回文诗词啦。

满园春光春满园,门迎喜气喜迎门

雾锁山头山锁雾,天连水尾水连天

凤落梧桐梧落凤,珠帘璧合璧帘珠

(最喜欢这一联了,凤落梧桐,珠联璧合,对仗工整,立意又好,既可比喻人才济济,又可用于恭贺新禧,哈哈)

大部分的回文诗、回文联顺着读倒着读意思都相同,但是有一个宋朝的诗人李禺却把回文诗作到了妙趣。

两相思

[宋] 李禺

【其一】

枯眼望遥山隔水,往来曾见几心知?

壶空怕酌一杯酒,笔下难成和韵诗。

途路阳人离别久,讯音无雁寄回迟。

孤灯夜守长寥寂,夫忆妻兮父忆儿。

两相思,怎能只有一方思,另一方思就让代码实现一下:

function palindrome(str) {

    var arr = str.split(‘‘);
    arr.unshift(‘。‘);
    arr.pop();
    var arrRev = arr.reverse().map(item => {
        if (item == ‘
‘) {
            return ‘‘;
        } else if (item == ‘?‘ || item == ‘。‘) {
            return ‘。
‘;
        }
        return item;
    });
    console.log(arrRev.join(‘‘));
}

var poem =
`枯眼望遥山隔水,往来曾见几心知?
壶空怕酌一杯酒,笔下难成和韵诗。
途路阳人离别久,讯音无雁寄回迟。
孤灯夜守长寥寂,夫忆妻兮父忆儿。`;

palindrome(poem);

儿忆父兮妻忆夫,寂寥长守夜灯孤。

迟回寄雁无音讯,久别离人阳路途。

诗韵和成难下笔,酒杯一酌怕空壶。

知心几见曾来往,水隔山遥望眼枯。

如果你对回文诗感兴趣的话可以去搜一下《璇玑图》和《盘中诗》,看后只能说古人真会玩,哈哈。



以上是关于回文检查器的主要内容,如果未能解决你的问题,请参考以下文章

回文检查器

使回文检查器保持字符串索引超出范围错误的一半,如何解决?

将微调器值从片段传递到活动

不使用向量、大小或其他参数的递归回文检查

JS回文检查(FreeCodeCamp项目)

使用 Deque 检查给定字符串是不是为回文