次のような簡単な問題です:
すべての大文字を小文字に変換し、英数字以外の文字をすべて削除した後、前後から同じように読める場合、そのフレーズは回文です。英数字には文字と数字が含まれます。
文字列 s を指定すると、それが回文の場合は true を返し、それ以外の場合は false を返します。
例 1:
入力: s = "人間、計画、運河: パナマ"
出力: true
説明: 「amanaplanacalpanama」は回文です。例 2:
入力: s = "車のレース"
出力: false
説明: 「raceacar」は回文ではありません。例 3:
入力: s = " "
出力: true
説明: s は、英数字以外の文字を削除した後の空の文字列 "" です。
空の文字列は前から見ても後ろから読んでも同じなので、回文です。制約:
1
は、印刷可能な ASCII 文字のみで構成されます。
回文に従って、基本的にアルファ以外をすべて削除してから、大文字と小文字を区別するメソッドを呼び出して、比較するために復帰します。
メソッドと少しの正規表現を使用すると、これを 3 行で解決できます。
class Solution { public boolean isPalindrome(String s) { final String reduced = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); final String inverted = new StringBuilder(reduced).reverse().toString(); return reduced.equals(inverted); } }
実行時間: 15 ミリ秒、有効な回文に対する Java オンライン送信の 22.51% よりも高速です。
メモリ使用量: 44.8 MB、有効な回文の Java オンライン送信の 34.15% 未満。
シンプルで簡単な質問としてはこれで十分ですが、パフォーマンスを向上させるには、各文字を反復してチェックし、必要に応じて削除して適応させることができます。この場合は、leetcode でサクシャムの回答をチェックアウトしてください (詳細を説明したい場合は、以下にコメントしてください)。
—
それだけです!他に議論したいことがあれば、お気軽にコメントしてください。何か見逃した場合はお知らせください。適宜更新します。
次の投稿まで! :)
以上がLeetcode ―トップインタビュー―。有効な回文の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。