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가지임
배열에 원소가 하나만 있거나, 공백인 ""
가 있는 경우
그래서 조건문을 통해 그에 맞게 값을 리턴해줌
일단, 나는 가장 길이가 짧은 걸 중심으로 반복문을 돌리기 위해 정렬을 한 뒤
해당 문자열을 이용하여 반복문을 돌렸음
그러면 strs
배열은 0번째 인덱스가 아닌 1번째 인덱스부터 돌려야하므로
range
의 시작을 1로 설정함
그리고 문자열 한 개씩 비교해야 하기 때문에 가장 짧은 문자열인 strs[0]
의 i
번째 인덱스와
그 다음 문자열인 strs
들의 i
번째 인덱스들을 비교
비교하다가 다른 문자열이 나오면 그 전까지 문자열을 리턴
다만, ['ab', 'abc', 'abcd']
의 케이스를 생각해볼 때
답은 'ab'
지만, 반복문은 세 번 이루어져야 하는 문제가 있음
세번째 되어야 "아! 여기서 다르네"하고 값들을 리턴할 수 있기 때문.
일반적인 for
문까지 끝낸다면 다른 케이스를 발동할 수 없기 때문에 그 때는 null
이 뜨는데
그럴 경우는 가장 짧은 문자열인 strs[0]
이 정답이 되어야 하기 때문에
마지막에 retur strs[0]
을 해줌