이번에도 문자열 관련 문제를 풀어봤다.
문제는 간단하지만 답은 조금 생각이 필요했던 문제여서 기록해본다.
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.
문제는 단순하다.
문자열 배열에서 가장 긴 공통 접두사를 찾는 것이다.
공통 접두사가 없으면 빈 문자열을 반환하면 된다.
나의 풀이..
var longestCommonPrefix = function(strs) {
let result = "";
for(let i=0; i<strs[0].length; i++) {
let prefix = strs[0].charAt(i);
for(let j=1; j<strs.length; j++) {
if(prefix != strs[j].charAt(i)) {
return result;
}
}
result += prefix;
}
return result;
};
이중 for문을 쓰고 싶지 않았지만 써야 하는 문제로 판단됐다.
그 부분을 확인하는데 시간이 조금 걸렸던 게 아쉽다.
첫 번째 for문은 처음 문자열 기준으로 접두사를 0부터 하나씩 대입하면서 반복을 한다.
두 번째 for문은 접두사를 가지고 두번째 문자열부터 하나씩 반복하면서 접두사를 비교한다.
접두사가 다른 문자열이 있다면 바로 result를 반환하고 종료한다.
모든 문자열의 접두사가 같으면 result에 접두사를 하나씩 더해준다.
조금 더 개선방법을 생각해보면..
제일 작은 길이의 문자열을 찾아서 그 기준으로 비교하는 방법도 있을 것이고
빈 문자열이나 예외 문자열이 있을 때 바로 종료하는 방법도 있을 것 같다.
let minLength = strs[0].length;
for(let i=1; i<strs.length; i++) {
if(strs[i].length < minLength) {
minLength = strs[i].length;
}
}
if(strs.length == 1) return strs[0];
그 외 다른 사람들 풀이를 확인해보면
postion 값을 저장해서 나중에 substring으로 접두사만 가져오는 식으로 하기도 했고 풀이 형태는 비슷했다.
'CodingTest' 카테고리의 다른 글
[LeetCode] Third Maximum Number (0) | 2022.08.07 |
---|---|
[LeetCode] Max Consecutive Ones (0) | 2022.08.07 |
[LeetCode] Valid Palindrome (0) | 2022.07.10 |