본문 바로가기

Algorithm

[LeetCode] 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를 찾는 function을 작성하라. 공통 prefix가 없는 경우 빈 문자열 ""를 반환하여라

풀이 

문자열 배열 중 첫번째 단어가 포함하는 알파벳을 기준으로 prefix를 찾는 방법으로 접근해보았다.

  const firstWord = Array.from(strs[0]);
  let prefix = '';

 

주어진 배열의 첫 단어를 딴 변수 firstWord와 prefix가 확정된 알파벳을 저장할 변수 prefix를 만들었다. 

 

 if (strs[0] === '') return prefix;
 if (strs.length < 2) return strs[0];

 

첫 단어 또는 배열의 단어 중 공백이 있다면, prefix자체가 존재할 수 없기 때문에 빈 문자열을 반환하고. 배열 내 단어가 1개만 있는 경우는 그단어 자체가 prefix기 때문에 배열의 첫 번째 단어를 반환한다. 

 

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    const firstWord = Array.from(strs[0]);
    let prefix = '';
    
    if (strs[0] === '') return prefix;
    
    if (strs.length < 2) return strs[0];
    
    for (let i = 0; i < firstWord.length; i++) {
        let char = prefix.concat(firstWord[i]);
        
        for (let j = 1; j < strs.length; j++ ) {
            const position = strs[j].indexOf(char)
            if (position == -1 || position > 0) return prefix;       
        }
        prefix = char;
    }
    return prefix;
};

 

 

다음으로는 for문으로 첫 번째 단어 내 알파벳을 순회하면서 prefix의 길이를 늘려가나며, 해당 문자열이 모든 단어의 prefix인지를 확인한다. 

다른풀이 

풀이에 들어가는 연산 시간도 짧고, 비교적 명료하게 되어있는 답안이라고 생각하여 메

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(str) {
  if(str.length === 0) return ""
for (var i = 0; i <str[0].length; i++) {

for (var j = 1; j <str.length; j++) {
 if (str[0][i] != str[j][i]) {
   return str[0].slice(0,i)
 }
}

}
return str[0]
};