https://leetcode.com/problems/longest-common-prefix/
워... 워... 이거 푸는데 좀 오래 걸렸다...
그래도 풀릴 때까지 풀겠다는 마음가짐으로 결국 풀어냈다...
어렸을 때부터 수학을 참 좋아했다.
문제가 안풀리면 그 문제 하나갖고 사흘이든 일주일이든 등교하는 버스 안에서, 식사하면서, 화장실에서 등 계속 생각하고 고민하면서 결국 풀어냈었다.
이 습관 덕분에 수학 성적이 아주 크게 올랐고, 전교에서 내 수학 성적은 월등했다.
아마도 한문제를 갖고 시도때도 없이 계속 고민하면서 수학적 사고력이 나도 모르게 발달하지 않았을까 한다.
비록 고수들이 보기에는 '이런 쉬운 문제를 오래걸렸다고?ㅋㅋ'이렇게 생각할 수도 있지만, 초보인 나로서는 이 문제를 풀고 참 감격스러웠다.
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 "".
Example 1:
Input: strs = ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
Constraints:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] consists of only lowercase English letters.
만약 하나라도 빈문자열이 있으면 빈값을 리턴한다.
빈문자열이 없다면 문자열의 문자 하나하나에 인덱스를 줘서 tup에 저장한다.
그리고 같은 인덱스끼리 묶어서 group에 저장한다.
마지막으로 같은 인덱스의 값이 모두 같은 값인지 set()함수로 비교하여 같으면 ans에 저장한다.
다르면 그 자리에서 break를 걸어 ans를 리턴한다.
그리고 strs에 길이가 다른 문자열이 들어오면 제일 작은 길이의 문자열의 길이만큼 비교하고, 그 이후에는 break를 걸어 더 이상 비교하지 않고 ans를 리턴한다.
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
tup = []
for str in strs:
if str == "":
return ""
for index, value in enumerate(str):
tup.append((index, value))
group = {}
for index, value in tup:
if index in group:
group[index].append(value)
else:
group[index] = [value]
ans = ""
for index, chars in group.items():
if len(group[index]) != len(group[0]):
break
else:
if len(set(chars)) == 1:
ans += chars[0]
else:
break
return ans
어서 실력이 늘기를...