JavaScript はどのように回文文字列を決定するか (分析例)

不言
リリース: 2018-09-01 12:00:08
オリジナル
2763 人が閲覧しました

この記事の内容はJavaScriptで回文文字列を判定する方法(サンプル解析)ですので、困っている方は参考にしていただければ幸いです。

Paindromes(ペインドローム)は、中国語で前後を読むのが同じであり、対称であることを意味し、英語では「上海の水道水は海から来ている」など、前を向いて後ろを向いて読むことを意味する言葉。 「マダム」など、すべて同じです。また、回文とも呼ばれる数字は、「16461」のような対称的な数字、つまり元の数字と同じ数字を並べ替えた数字を指します。

問題の説明

指定された文字列を判定し、その文字列が回文である場合は、true,反之返回falseを返します。

実装方法

1. reverse()

function Palindromes(str) {
    let reg = /[\W_]/g; // \w 匹配所有字母和数字以及下划线; \W与之相反; [\W_] 表示匹配下划线或者所有非字母非数字中的任意一个;/g全局匹配
    let newStr = str.replace(reg, '').toLowerCase();
    let reverseStr = newStr.split('').reverse().join('')
    return reverseStr === newStr; // 与 newStr 对比
}
ログイン後にコピー

実は、ここでは文字を配列に変換し、配列を反転してから文字列を変換するなど、配列操作のステップが多く、パフォーマンスはあまり良くありません。配列は参照型であると考えられます。配列を変更するには、新しいヒープ アドレス空間を開く必要があります。

2. for ループ

function Palindromes(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, '').toLowerCase();
    for(let i = 0, len = Math.floor(newStr.length / 2); i < len; i++) {
        if(newStr[i] !== newStr[newStr.length - 1 - i]) return false;
    }
    return true;
}
ログイン後にコピー
  • 書き方 2

function Palindromes(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, &#39;&#39;).toLowerCase();
    let len = newStr.length;
    for(let i = 0, j = len - 1; i < j; i++, j--) { // i < j
        console.log(&#39;---&#39;);
        if(newStr[i] !== newStr[j]) return false;
    }
    return true;
}
ログイン後にコピー

3. 再帰

function palin(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, &#39;&#39;).toLowerCase();
    let len = newStr.length;
    while(len >= 1) {
        console.log('--')
        if(newStr[0] != newStr[len - 1]) {
            // len = 0; // 为了终止 while 循环 否则会陷入死循环
            return false;
        } else {
            return palin(newStr.slice(1, len - 1)); 
        // 截掉收尾字符 再次比较收尾字符是否相等 
        // 直到字符串剩下一个字符(奇数项)或者 0 个字符(偶数项)
        }
    }
    return true;
}
ログイン後にコピー

質問に別の要件を追加します

指定された文字列について、それがであるかどうかを判断するために最大 1 文字を削除できます。まだ回文ではありません。

変数フラグを設定すると、両側の文字のペアが初めて異なることが判明した場合、その後の比較で相違が見つかった場合は、結果がすぐに返されます。

function palin(str) {
    let flag = false; // 第一次不同可允许
    let len = str.length;
    for(let [i, j] = [0, len - 1]; i < j; i++, j--) {
        if(str[i] !== str[j]) {
            if(flag) {
                return false;
            }
            // 第一次发现不同时,让右边-1 或左边+1判断相不相等 
            // 这时候若相等可继续 否则直接返回结果 false
            if(str[i++] == str[j]) {
                i++;
                flag = true;
            } else if (str[i] == str[j--]) {
                j--;
                flag = true;
            } else {
                return false;
            }
        }
    }
    return true;
}

palin('abaacaaa');
palin('aabsdjdbaa');
palin('ab')
ログイン後にコピー

関連する推奨事項:

PHP は、文字列が回文文字列かどうかを判断します

文字列を検索し、検索結果を string に返す JavaScript メソッド_javascript スキル

以上がJavaScript はどのように回文文字列を決定するか (分析例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート