1. 程式人生 > 實用技巧 >迴文檢查器

迴文檢查器

最近在刷 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 == '\n') {
            return '';
        } else if (item == '?' || item == '。') {
            return '。\n';
        }
        return item;
    });
    console.log(arrRev.join(''));
}

var poem =
`枯眼望遙山隔水,往來曾見幾心知?
壺空怕酌一杯酒,筆下難成和韻詩。
途路陽人離別久,訊音無雁寄回遲。
孤燈夜守長寥寂,夫憶妻兮父憶兒。`;

palindrome(poem);

兒憶父兮妻憶夫,寂寥長守夜燈孤。

遲迴寄雁無音訊,久別離人陽路途。

詩韻和成難下筆,酒杯一酌怕空壺。

知心幾見曾來往,水隔山遙望眼枯。

如果你對迴文詩感興趣的話可以去搜一下《璇璣圖》和《盤中詩》,看後只能說古人真會玩,哈哈。