1일 1코딩 - leetcode 14. longest prefix

0

알고리즘

목록 보기
3/8

내 답변

처음 접근 - sort


var strs = ["flower", "flow", "flight"]

var longestCommonPrefix = function(strs:any) {
  const sorted = strs.sort((a:any,b:any)=> a.length - b.length)
  var i = 0
  const arr = new Array
  while (i <sorted[0].length) {
    if (sorted[0][i]===sorted[1][i] === sorted[2][i]){
      arr.push(sorted[0][i])
      console.log(arr)
      i ++;
      return arr
    } else {
      const result = arr.join('')
      return result
    }
  }
    
};


longestCommonPrefix(strs)
  

  • 중간에 조건문 설정하는 과정에서 다음과 같은 오류 발생
  • 다중 조건문에서는 &&로 이어주어야 함
  • 이어주었지만 이건 element가 3개인 경우만 고려한 코딩 ->

추가로 배운 문법

  • strs.sort((a:any,b:any)=> a.length - b.length) : 글자길이가 작은 순서로 정렬

두번째 접근 - 교집합

var longestCommonPrefix = function(strs) {
  if (strs.includes("")) {
        return ""
  }
  let arr = strs.map (x => x.split(""))
  let common = arr[0]
  for (const element of arr) {
    let intersection = element.filter(x=> common.includes(x))
    common = intersection
  }
  return common.join("")
  
};
  • 결론적으로 이것도
  • 집합이라는 특성상 순서가 고려가 되지 않아서 cir, car에서 cr이 나와버림

추가로 배운 문법

  • let intersection = element.filter(x=> common.includes(x)) : 두 집합간의 교집합을 계산

다른 사람 답변

sort + 첫번째- 마지막 요소 비교

var longestCommonPrefix = function(strs) {
  strs.sort();
  for (let i = 0; i < strs[0].length; i++) {
    if (strs[0][i] !== strs[strs.length - 1][i]) return strs[0].substr(0, i);
  }
  return strs[0];
};
  • str.sort()면 알파벳순서로 정렬
  • 첫번째마지막 요소의 각 글자를 비교하면 원하는 결과가 나온다.
  • 다돌고 다 같다면 최종적으로 첫번째 요소 출력

추가로 배운 문법

  • str.substr(0, i); : index에 맞는 스트링을 슬라이스

d

var longestCommonPrefix = function(arr) {
    if (!arr.length) return "";
    let prefix = "";
    for (let i = 0; i < arr[0].length; i++) {
        for (let j = 0; j < arr.length-1; j++) {
            if (arr[j][i] !== arr[j+1][i]) return prefix;
        }
        prefix += arr[0][i];
    }
    return prefix;
    // Time Complexity: O(M*N), M = length of shortest word, N = length of given array
    // Space Complexity: O(1)
};
  • 빈 배열일 떄 처리
  • 첫번째 단어를 기준으로 뒤에 단어와 비교
  • 비교하다 다른 경우 early return
  • 기존 prefix에 추가하는 방식
profile
기록을 통해 한 걸음씩 성장ing!

0개의 댓글