본문 바로가기

Programming/알고리즘 공부

[LeetCode] Longest Common Prefix | 난이도: Easy

반응형

문제

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 "".

문자 배열에서 가장 긴 공통 접두사를 찾는 함수를 만드시오.

공통 접두사라 없을 시 ""를 리턴.


예시

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

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

제약조건

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] consists of only lower-case English letters.

답안

class Solution {
    public String longestCommonPrefix(String[] strs) {
        
        if(strs.length == 0) return ""; #1
        String pre = strs[0]; #2
        
        for(int i = 1; i < strs.length; i++){ #3
            String cur = strs[i]; #4 
            while(cur.indexOf(pre) != 0){ #5
                pre = pre.substring(0,pre.length()-1); #6
            }
        }
        return pre; #7
    }
}

 

Input: strs = ["flower","flow","flight"] 일 경우를 가정하고 위 코드를 실행시켜보자.

 

#1 : 배열의 길이가 0일 경우, 즉 공통된 접두사를 찾지 못했을 경우 "" 반환.

#2 : strs 배열의 0번째 인덱스 값인 "flower"를 문자 변수 pre에 담는다.

#3 : strs 배열의 길이가 1보다 큰 경우 아래 내용을 반복하는 for 구문 작성. 

#4 : int i = 1로 작성했기 때문에 1부터 반복된다. strs 배열 인덱스 1번, 즉 2번째 값인 "flow"를 문자 변수 cur에 담는다.

#5, #6 : 주어진 매개변수와 일치하는 인덱스 값을 반환하는 indexOf 함수 사용. "flow".indexOf("flower")가 0아닌 경우, 즉 매개변수값이 일치하지 않는다면 0번째 인덱스값을 가진 pre에서 pre 문자 길이 -1만큼을 글자 추출.

 

while문에서 pre 문자를 기준으로 일치하는 값이 없으면 문자열을 하나씩 자르면서 맞춰보고 또 반복하고 하는 과정을 계속 반복한다. 그리고 해당 작업이 완료되면 i값이 1 증가된 만큼의 인덱스 값을 가지고 while문을 반복하여 공통된 접두사를 찾아나간다.

반응형