ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の基本的な練習: 文字列と回文の反転

JavaScript の基本的な練習: 文字列と回文の反転

高洛峰
高洛峰オリジナル
2017-02-21 14:22:241346ブラウズ

最近勉強していたら基本アルゴリズムの章に来て、jsの組み込みオブジェクトのメソッドや思考ロジックの習熟度が上がったので、この機会に自分の学習体験とまとめを書き留めておきます。以下の記事では、JavaScriptを使って文字列の反転や回文を実現するための関連情報を中心に紹介していますので、困っている方はぜひ参考にしてみてください。

文字列を反転する

文字列を反転するとは、文字列を逆の順序で処理することを意味します。たとえば、文字列「hello」を指定すると、反転後に「olleh」が返される必要があります。

テストケース

  1. reverseString("hello") は「olleh」を返すはずです reverseString("hello") 应该返回 “olleh”

  2. reverseString("Greetings from Earth") 应该返回 “htraE morf sgniteerG”

实现思路

这里说最方便的方法就是将字符串转成数组,再颠倒数组并转成字符串返回。需要用到字符串对象和数组对象的内置方法:

  1. String.split()

  2. Array.reverse()

  3. Array.join()

具体可以去看JavaScript参考手册

function reverseString(str) {
 return str.split('').reverse().join('');
}

reverseString("hello");

一句return搞定,很简单有木有?!

在此基础上来看看回文是怎么玩的⬇️

回文

“Madam,I'mAdam.” 这是亚当在伊甸园里碰上夏娃说的第一句话,这句话正着读和反着读一模一样,这样的句子就是回文,英文里叫Palindrome。

举个栗子——“上海自来水来自海上”,这句话顺着读和反着读都是相同的,还有很多英语单词也是:Level、Madam、Radar、LOL(哈哈哈)…

测试用例

  1. palindrome("Race Car") 应该返回 true

  2. palindrome("not a palindrome") 应该返回 false

  3. palindrome("0_0 (: /- :) 0-0") 应该返回 true

实现思路

我们需要写一个叫palindrome()的方法,传入一个叫str的参数,如果str是一个Palindromes将返回true,反之为false。

需要注意将标点符号和空格去掉并toUpperCase or toLowerCase后再进行判断。

需要用到以下知识点:

  • 正则表达式 (regular expression) ,用来过滤符号和空格

  • String.replace() 替换与正则表达式匹配的子串

  • String.toLowerCase()

reverseString("Greetings from Earth") は返すはずです"htraE morf sgniteerG"


実装アイデア

  • ここで最も便利な方法は、文字列を配列に変換し、配列を反転して文字列に変換して返すことです。文字列オブジェクトと配列オブジェクトの組み込みメソッドを使用する必要があります:

  • String.split()

  • Array.reverse()

  • Array.join()

  • 詳しくは、JavaScript リファレンスマニュアルをご覧ください

  • function palindrome(str) {
     str = str.replace(/[\W_]/g,'').toLowerCase();
     var reverseStr = str.split('').reverse().join('');
     return str===reverseStr;
    }
    
    palindrome("eye");
  • たった 1 回の return で実行でき、非常に便利ですシンプルですね。 !
  • これに基づいて回文がどのように機能するかを見てみましょう⬇️

  • 回文

「マダム、私はアダムです。」これはアダムがエデンの園でイブに会ったときに言った最初の文です、この文は読まれますこのような文は回文であり、英語では Palindrome と呼ばれます。 例 - 「上海の水道水は海から来ています」 この文は同じように、逆から読んでも、レベル、マダム、レーダー、LOL (笑)...

テストケース。

palindrome("Race Car") は true を返すはずです

palindrome("not a palindrome") は false を返すはずです

palindrome("0_0 (: /- :) 0-0") は true を返すはずです

実装アイデア

呼び出し メソッドを記述する必要がありますpalindrome() の関数は str というパラメータを渡します。str が回文の場合は true を返し、それ以外の場合は false を返します。

句読点やスペースの削除、大文字か小文字かに注意して判断してください。

🎜🎜次の知識ポイントを使用する必要があります: 🎜🎜🎜🎜🎜正規表現 (正規表現)、記号とスペースのフィルタリングに使用されます🎜🎜🎜🎜String.replace() 置換と正規表現部分文字列の一致 🎜🎜🎜🎜String.toLowerCase() 文字列を小文字に変換します 🎜🎜🎜🎜🎜正規表現について 🎜🎜🎜🎜 これには、大文字と小文字の英字と整数、句読点が一致する必要がありますスペースはフィルターで除外されます。したがって、/[^A-Za-z0–9]/g または /[W_]/g🎜🎜🎜🎜[^A-Z] を使用して、26 文字以外の大文字 🎜🎜🎜🎜[^a-z] のいずれかと一致させることができます。 ] と一致します 26 個の小文字のいずれとも一致しません 🎜🎜🎜🎜[^0-9] 0 ~ 9 以外の任意の数字と一致します 🎜🎜🎜🎜[^_] アンダースコア以外と一致します 🎜🎜🎜🎜^文字列 🎜🎜🎜🎜w 小文字であり、文字、数字、アンダースコア、または中国語の文字と一致することに注意してください 🎜🎜🎜🎜W これは大文字であり、文字、数字、アンダースコア、または漢字以外の文字と一致することに注意してください。 to [^A-Za-z0- 9_] 表示 G は、グローバル検索であることを示します 🎜🎜🎜🎜🎜 これは私の方法です: 🎜🎜🎜🎜
function palindrome (str) {
 var reg = /[\W_]/g,
 regStr = str.toLowerCase().replace(reg, ''),
 len = regStr.length;

 for (var i = 0, halfLen = len / 2; i < halfLen; i++){
 if (regStr[i] !== regStr[len - 1 - i]) {
  return false;
 }
 }
 return true;
}
🎜🎜🎜🎜 オンラインで for ループを使用して次のことを実現できます: 🎜🎜🎜🎜
function palindrome (str) {
 // 删除字符串中不必要的字符
 var re = /[\W_]/g;
 // 将字符串变成小写字符
 var lowRegStr = str.toLowerCase().replace(re, &#39;&#39;);
 // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
 if (lowRegStr.length === 0) {
 return true;
 }

 // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
 if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
 return false;
 } else {
 return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
 }
}
🎜🎜 🎜 このアイデアは回文の特性を巧みに利用しており、文字列全体を半分に切り、それをループして最初と最後の文字が等しいかどうかを判断します。 🎜🎜🎜再帰を使用した実装もあります: 🎜🎜🎜🎜rrreee🎜🎜🎜 他の 2 つの実装アイデアは私よりもはるかに優れていると感じます。私はプログラミングの道をあまり進んでいないので、それを実行しましょう。一歩ずつ。 🎜🎜ところで、文字列を反転することと回文を反転することの違いについては心配しないでください。文字列を反転すると文字列が逆の順序で返されるだけですが、回文はより長く複雑な文に対応するため、スペースと句読点が除外された文と逆の順序の文を比較して、それらが等しいかどうかを確認する必要があります。 🎜🎜文字列の反転や回文に関する基本的な JavaScript 演習に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。