アルゴリズム-共通の開始語を検索

1314 ワード

パラメータとしてstrsにはいくつかの文字列の配列があります.
各配列の共通の開始語を返す関数を作成します.
指定されたシナリオは次のとおりです.
["qwerty", "qwertykeyboard", "qwertynickname"]
同じ配列が与えられている場合は、ここで出力qwertyの関数を実装する必要があります.
最初のアイデアは、まず配列の中で最も長い文字列(上記の例では「qwertyニックネーム」)を検索することです.各配列を別の配列に分割し、各配列の最初の文字を比較して、文を最長文字列の長さに回転させます.
もしそうなら、新しい空の配列でpushを行うことができ、そうでなければ、終了した関数を書くことができます.
しかしfor文内にはfor文が書かれており、その中でif文を書くコードが複雑になり、変数iとjは私の意思で制御されていないため、初めて2回回転すると、後ろに字があっても比較できない状況に陥っている.
そのまま髪を結って、あるコードが見えました.
const getPrefix = strs => {
    let init = strs[0];
  if(init){
  for (let i = 0; i < init.length; i++) {
    for (let z = 1; z < strs.length; z++) {
      while (strs[z].indexOf(init) === -1) {
          init= init.substring(0, init.length - 1);
        console.log(init)
      }
    }return  init
  }} return ""
}
まず、配列の最初の要素を変数として指定します(実際には、最も長い文字列を検索する必要はありません.最も長い文字列でも、短い文字列にその文字がなければ、すべて無視されます).
その後、if文にinitが存在する場合(trueになるまでwhile文を続行します).
最初の配列の文字indexOfが文字列配列のzにある場合.
Initを再割り当てすることにより、substring関数は先頭からinitの長さまで切り取られ、返されます.
Chrome開発者ツールコンソールウィンドウでは、whileドアが何度も開いて何度も開いていたので、whileドアは見ていなかったのを覚えています(実際、条件をつけなければ無限ループなのでformoonを書けばいいのですが、なぜwhileドアを書かなければならないのかと思います).
同時に、元のドアもこのように使うことができて、また1回学びました.