Search

Search Form

Results

    No result!

Longest Common Prefix

December 22, 2024

문제 링크

해결 방법 1

function longestCommonPrefix(strs: string[]): string {
  let ans = "";
  let strToCompare = "";
  strs.forEach((str, idx, arr) => {
    if (idx === 0) {
      strToCompare = str;
      ans = strToCompare;
    } else if (str || str === "") {
      strToCompare = findCommonPrefix(strToCompare, str);
      ans = strToCompare;
    }
  });
  return ans;

  function findCommonPrefix(str1: string, str2: string): string {
    let commonPrefix = "";
    for (let i = 0; i < Math.min(str1.length, str2.length); ++i) {
      if (str1[i] === str2[i]) {
        commonPrefix += str1[i];
      } else {
        break;
      }
    }
    return commonPrefix;
  }
}

문자열 두 개를 인자로 받아서 공통 접두사를 반환하는 함수를 사용했다. else break은 접두사만 반환하도록 하기 위한 것인데, ["cir", "car"]와 같은 테스트 케이스에서 "cr"이 반환되지 않도록 방지한다. 그리고 주어진 문자열 배열을 차례로 순회하면서 위 함수 이용해 모든 문자열의 공통 접두사를 찾아낸다.

해결 방법 2

class Solution:
    def longestCommonPrefix(self, v: List[str]) -> str:
        ans=""
        v=sorted(v)
        first=v[0]
        last=v[-1]
        for i in range(min(len(first),len(last))):
            if(first[i]!=last[i]):
                return ans
            ans+=first[i]
        return ans

다른 분의 풀이다. 내가 풀었던 방법보다 훨씬 간단하다. 이걸 보고 내 방식의 방향이 많이 돌아갔음을 알았다. 주어진 문자열 배열을 정렬할 생각을 못했다. 보면 정렬한 뒤 가장 짧은 문자열과 긴 문자열만 비교하면 된다. 어차피 가장 짧은 문자열에 공통 접두사가 없으면 말짱 도루묵이기 때문이다. 좋은 방식이다.