입력된 문자열 리스트 중 가장 짧은 문자열의 길이를 구한 뒤, 이를 기준으로 각 문자열의 같은 인덱스 위치에 있는 문자들을 비교하여 공통 prefix를 찾습니다. 이 때, 모든 문자열에 대해 해당 인덱스 위치에 문자가 있는 경우에만 공통 prefix에 추가하고, 아니면 해당 위치부터 뒤의 문자열들은 검사할 필요가 없으므로 바로 반환함.
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 문자열이 1개 이하인 경우, 해당 문자열을 반환합니다.
if len(strs) <=1:
return strs[0]
ans = ""
num_str = len(strs)
# 입력된 문자열들 중 가장 짧은 문자열의 길이를 찾습니다.
min_len = len(min(strs,key=len))
# 가장 짧은 문자열의 길이만큼 "-" 문자를 가진 새로운 문자열을 만들어
# 입력된 문자열 리스트에 추가합니다.
strs.append(["-" for _ in range(min_len)])
# 각 문자열의 같은 인덱스 위치에 있는 문자들을 비교하여
# 가장 긴 공통 prefix를 찾습니다.
for i in range(min_len):
flag = False
for j in range(num_str):
if strs[j+1][i] == strs[j][i]:
flag = True
else:
flag = False
if strs[j+1][i] != "-":
return ans
if strs[j+1][i] == "-":
ans += strs[j][i]
return ans
ChatGPT를 통한 개선 소스
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) <= 1:
return strs[0] if strs else ""
min_len = min(len(s) for s in strs)
ans = ""
for i in range(min_len):
c = strs[0][i]
if all(s[i] == c for s in strs):
ans += c
else:
break
return ans
strs=["hello", "world"]
zip(strs) 사용시 ("hello",), ("world",)
zip(strs)는 사용시 zip(*strs)는 ("h", "w"), ("e", "o"), ("l", "r"), ("l", "l"), ("o", "d")와 같은 결과를 반환
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
ans = ''
for char in zip(*strs):
if len(set(char)) > 1:
return ans
else:
ans += char[0]
return ans
class Solution(object):
def longestCommonPrefix(self, strs):
ans =''
min_len = len(min(strs,key=len))
strs.sort()
s1,s2 = strs[0],strs[-1]
for i in range(min_len):
if s1[i]==s2[i]:
ans+=s1[i]
else :
return ans
return ans