strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어strs = ['start', 'stair', 'step'] return은 'st'strs = ['start', 'wework', 'today'] return은 ''
이렇게 풀면 안된다 !!!!!!
이미 앞에서 prefix가 끝나서 그 이후로는 돌릴 필요가 없는데, 끝까지 다 돌리는 방법.
def get_prefix(strs):
result = ''
result_pre = ''
# input 값이 비어있을 경우, 빈 result 반환
if len(strs) == 0:
return result
# 첫번째 str 기준으로
for i in strs[0]:
result_pre = i
for word in strs[1:]:
if word.startswith(result+result_pre):
continue
else:
result_pre = ''
result = result + result_pre
return result
set()를 이용한 방법strs의 각 i[0] 꺼내서 set로 넣고, set 길이 1 이면 해당 i를 result에 넣기
def get_prefix(strs):
list_strs = []
result = ''
# input 값이 비어있을 경우, 빈 result 반환
if len(strs) == 0:
return ''
# 가장 짧은 str의 길이까지만 돌리기
index = len(min(strs))
for i in range(index):
for str in strs:
list_strs.append(str[i])
# set() == 1인 경우, 즉 리스트에 들어온 모든 character가 같을 때
if len(set(list_strs)) == 1:
result = result + str[i]
list_strs = []
else:
return result
return result
sort()를 이용한 방법가장 간단하고 빠른 방법이지만,
sort()를 이용하여 첫번째와 마지막 요소만 비교한다는, 이 로직을 생각해내기가 어려웠다.
def get_prefix(strs):
result = ''
# input 값이 비어있을 경우, 빈 result 반환
if len(strs) == 0:
return result
# abc 순으로 리스트 내 요소들을 정렬
strs.sort()
# 첫번째와 마지막 요소만 비교한다
first, last = strs[0], strs[-1]
# 둘 중 더 짧은 요소의 길이만큼만 돌린다
for i in range(len(min(first, last))):
if first[i] == last[i]:
result += first[i]
else:
break
return result