LeetCode #14

Kiyong Lee·2022년 1월 5일
0

leetcode

목록 보기
4/20

14. Longest Common Prefix


1. 코드

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        
        if len(strs) == 1 : return strs[0]
        
        if "" in strs : return ""
        
        strs.sort(key=len)
        
        for i in range(len(strs[0])) :
            for j in range(1, len(strs)) :
                if strs[0][i] != strs[j][i] :
                    return strs[0][:i]
        return strs[0]

2. 풀이

우선, 특이 케이스부터 정리했는데 나올 특이케이스는 2가지임

배열에 원소가 하나만 있거나, 공백인 ""가 있는 경우

그래서 조건문을 통해 그에 맞게 값을 리턴해줌

일단, 나는 가장 길이가 짧은 걸 중심으로 반복문을 돌리기 위해 정렬을 한 뒤

해당 문자열을 이용하여 반복문을 돌렸음

그러면 strs 배열은 0번째 인덱스가 아닌 1번째 인덱스부터 돌려야하므로

range의 시작을 1로 설정함

그리고 문자열 한 개씩 비교해야 하기 때문에 가장 짧은 문자열인 strs[0]i번째 인덱스와

그 다음 문자열인 strs들의 i번째 인덱스들을 비교

비교하다가 다른 문자열이 나오면 그 전까지 문자열을 리턴

다만, ['ab', 'abc', 'abcd']의 케이스를 생각해볼 때

답은 'ab'지만, 반복문은 세 번 이루어져야 하는 문제가 있음

세번째 되어야 "아! 여기서 다르네"하고 값들을 리턴할 수 있기 때문.

일반적인 for문까지 끝낸다면 다른 케이스를 발동할 수 없기 때문에 그 때는 null이 뜨는데

그럴 경우는 가장 짧은 문자열인 strs[0]이 정답이 되어야 하기 때문에

마지막에 retur strs[0]을 해줌

profile
ISTJ인 K-개발자

0개의 댓글