[Leetcode] Longest Common Prefix



私の考えの論理


  • 空の文字列を含む変数の答えを作成します.

  • strsという配列の最初の言葉を回します.

  • ぐるっと回って、答えに単語を入れます.

  • 単語を1つ追加するたびに、for文に並べられた2番目の単語を末尾のfor文に移動し始め、単語のiの1番目の文字が答えのiの2番目の文字と同じであることを確認します.

  • 正しい場合は、最初の単語の文字を答えに入れ続け、異なる場合は最後に追加した文字以外の値を返します.

  • strsに単語が1つしか存在しない場合は、砲撃せずに答えを返します.
  • 回答は以下の通りです.
    const getPrefix = (strs) => {
      let answer = "";
      // 혹시나 strs의 첫번째 단어가 undefined일 경우 빈 문자열을 return한다.
      if (strs[0] === undefined) return answer;
      
      for (let i = 0; i < strs[0].length; i++) {
        answer += strs[0][i]; //첫번째 문자열에서 앞에서부터 차례로 한 단어씩 넣어준다.
    
      for (let j = 1; j < strs.length; j++) {
      	// 두번째 단어의 문자열 앞에서부터 answer와 동일한지 확인한다.
        if (strs[j][i] !== answer[i]) {
        answer = answer.split("").slice(0, answer.length - 1).join("");    
         return answer      
        }
       }
      }
    return answer;
    };
    
    私が説明した方法は二重砲口なので、ドアやwhile、substringを利用する方法など、他のもっと良い方法があるかどうかを調べました.
    回答は以下の通りです.
    const strs = ['start', 'stair', 'step']  
    
    const getPrefix = (strs) => {
        let answer = strs[0];  // 첫번째 단어
        
        if (strs[0] === undefined) return "";
        
        for(let i=1; i<strs.length; i++){            
            while(strs[i].indexOf(answer) !== 0){               
                answer = answer.substring(0, answer.length-1)
            }
        }
        return answer;
    }
    最初の単語を答えに入れて、
    たとえばstartを追加した後、
    並べられた2番目の単語stairからドアを回します.
    階段もあります.indexOf(答え)が0になる前に、答えの値を末尾から切り捨てます.
    start => star => sta => st
    答えがstの場合、stairはstを含むため、indexOf値は0で、while文は終了します.
    そして、次の単語stepも同じ論理でwhileを実行します.
    繰り返し文が完了すると、答えの最終値が返されます.

    の最後の部分🍯


    これは私の恨みを晴らす方法よりずっと簡単なようです.
    また、文字列を切り取るときはsubstringという文字列内蔵関数を使用する必要があります!利用する
    列に変えるべきでなくて、それから切って、ほほほ
    アルゴリズムを解くたびに,二重砲口の代わりに他の有効な方法があるかどうかを考慮しなければならない.❗️