상세 컨텐츠

본문 제목

[LeetCode] Longest Common Prefix

Coding/알고리즘

by hwlink 2022. 1. 30. 02:15

본문

문자열 배열 중에서 가장 긴 공통 접두사 문자열을 찾는 함수를 작성하십시오.

공통 접두사가 없으면 빈 문자열을 반환합니다 "".

 

접두사: 영어에서 접두사(prefix)는 단어 맨 앞에 결합되어 본래 의미와 다른 의미를 나타낼 수 있게 하는 접사(affix)다.

ex: proceed, prospect, produce     여기서 접두사 pro '앞을 향해', '앞쪽으로' 를 뜻한다.

 

 

Example 1:

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

Example 2:

Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

 

var longest = (strArr) =>{
        let size = strArr.length;
        if (size == 0)
            return "";
        if (size == 1)
            return strArr[0];
        strArr.sort();
   
        let end = Math.min(strArr[0].length, strArr[size-1].length);

        let i = 0;
        while (i < end && strArr[0][i] == strArr[size-1][i] )
            i++;
            
        let pre = strArr[0].substring(0, i);
        return pre;
}

longest(["flower","flow","flight"]);

 

1. 최초로 인풋으로 들어오는 str 배열의 길이를 파악해주어 길이가 1이면 그 자체를 반환 /  빈 값이면 ""을 리턴해주어 분기처리한다.

2. 위 두 경우를 제외한 나머지는 sort를 사용하여 strArr를 알파벳 순으로 정렬해준다.

     [ 'flight', 'flow', 'flower' ]로 정렬된다.

3. 검색할 접두사 문자열들의 길이를 처음과 끝에서 Math.min()으로 최소길이를 찾는다. >> 들어온 배열 요소중 가장 길이가 작은 기준으로만 검사하면 되기 때문이다.

4. while 문으로 i<end 이고 strArr[0][i] == strArr[size-1][i] 까지 반복문을 돌려주어 첫번째 요소와 마지막 요소 사이의 공통 접두사를 찾아준다. 

 

관련글 더보기