エンドとアルゴリズムleetcode 125.エコーの検証


[TOC]
フロントエンドとアルゴリズムleetcode 125.エコーの検証
テーマの説明
文字列を指定して、文字列かどうかを確認します.文字列と数字文字だけを考慮して、文字の大きさや文字を無視できます.
説明:この問題では、空の文字列を有効な文字列として定義します.
例1:
  : "A man, a plan, a canal: Panama"
  : true
例2:
  : "race a car"
  : false
125.回文列を検証する
概要
問題の中で言及されているのはアルファベットと数字だけでなく、アルファベットの大文字と小文字を無視することです.
ヒント
二重ポインタ
解析
解法一:api侠
この問題は狂ったようにアプリを呼び出すことで解決できますが、スピードが遅いです.
解法二:双針
タイトルはアルファベットと数字を考慮して、大文字と小文字を無視して、先に元の文字列を正則に置き換えることができます.その後、すべて小文字に変換して、後尾の二つのポインタを一度に対に設定して、一致しないとfalseに戻ります.
アルゴリズム
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
  // s = s.match(/\w/g);
  // if (s === null || s.length <= 1) {return true;}
  // return s.join('').toLowerCase() === s.reverse().join('')
  //   .toLowerCase();
  //     
  s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
  let [i, j] = [0, s.length - 1];
  while (i <= j) {
    if (s.charAt(i++) !== s.charAt(j--)) {return false;}
  }
  return true;
};
着信テスト用例の運転結果
input:"A man, a plan, a canal: Panama"
output:true
実行結果
     :64 ms,     javascript       99.91%   
     :37.3 MB,     javascript       72.83%   
GitHub倉庫
125.回文列を検証する
もっと見る
もっと問題を見てください