💻

【LeetCode-Easy】14. Longest Common Prefix

2024/02/11に公開

*これはLeetCodeの問題「14. Longest Common Prefix」の回答をメモした備忘録です。

問題

Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".

文字列の配列の中から最も長い共通のPrefix文字列を検索する関数を作成する。
共通のプレフィックスがない場合は、空の文字列 "" を返す。

Input: strs = ["flower","flow","flight"]
Output: "fl"

Input: strs = ["dog","racecar","car"]
Output: ""
共通しているPrefixがない

回答

Solutionsでvest votedだった回答

function longestCommonPrefix(strs: string[]): string {
  let prefix = strs[0];

  for (let i = 1; i < strs.length; i++) {
    while (!strs[i].startsWith(prefix)) {
      prefix = prefix.slice(0, -1);
    }

    if (prefix === '') {
      return prefix;
    }
  }
  
  return prefix;
};

回答(解説メモあり)

function longestCommonPrefix(strs: string[]): string {
//longestCommonPrefixはstring型、引数であるstrsはstring型の配列で渡される
  let prefix = strs[0];
    //prefixに、strsの0番目の文字列を入れる(flower)
  for (let i = 1; i < strs.length; i++) {
    //配列の0番目と比較するために配列の1番目からスタートし、strsの配列分だけループする
    while (!strs[i].startsWith(prefix)) {
        //prefixがstrs[i]の先頭にマッチしない場合に次の処理が実行される(flow)
      prefix = prefix.slice(0, -1);
        //prefixを1文字削除して、prefixに代入する(flowe)
    }
    //このループが終了すると、prefixがstrs[i]の先頭にマッチするようになる(fl)
    if (prefix === '') {
      return prefix;
        //prefixが空文字列になった場合、共通のprefixが見つからなかったということなので空文字列を返して処理を終了
    }
  }
  return prefix;
    //最終的に、prefixには最長の共通の接頭辞が残り、それが返り値として返される(fl)
};

While文

式の値がtrueである間、文を繰り返し実行する
例) while (!strs[i].startsWith(prefix))
prefixがstrs[i]の先頭にマッチしない間繰り返し実行

Discussion