#14. Longest Common Prefix
문제
주어진 문자열의 배열에서 가장 긴 접두사를 찾는 문제.
설명
처음에는 접두사라는게 뭔지몰라서 가장긴 공통된 문자열을 찾는 줄 알고, 열심히 코드를 만들었습니다.
근데 Submit
을 눌러보니 계속 틀렸다고 나와서 접두사를 검색해보고 다시 코드를 만들었습니다.
제가 실수로 만든 가장 긴 공통된 문자열을 찾는 코드
는 아래 따로 설명하겠습니다.
자세한 설명은 코드에 주석으로 적겠지만, 간단하게 말하면 입력받은 모든 문자열을 돌면서 가장긴 접두사를 찾습니다.
indexOf() 를 사용해서 indexOf() 가 0
을 반환하는지 확인해서 접두사인지 확인할 수 있습니다.
답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var longestCommonPrefix = function(strs) {
let result = ''; // 반환할 가장 긴 접두사를 저장할 변수
if (strs.length === 0) return result; // 입력받은 배열 strs가 빈 배열이면 ''을 반환합니다.
const str = strs[0]; // 어떤 문자열을 사용해도 상관없지만 그냥 첫 번째 문자열을 기준으로 잡습니다.
for (let i = 0; i < str.length; i++) { // 첫 번째 문자열을 돌면서 한 문자씩 가져옵니다.
const common = result + str[i]; // 새로운 문자를 추가한 문자열이 가장 긴 접두사인지 확인하기 위해 문자열을 만듭니다.
for (let st of strs) {
if (st.indexOf(common) !== 0) return result;
// 입력받은 문자열들을 돌면서 새로운 긴 접두사가 문자열에 접두사로 있는지 확인합니다.
// 없다면 이전가지의 문자가 가장 긴 접두사이므로 반환합니다.
}
result = common; // 현재 common이 가장 긴접두사 이므로 result를 common의 값으로 변겅합니다.
}
return result;
};
|
실수로 만든 가장 긴 공통된 문자열을 찾는 코드
우선! 입력받은 strs
배열의 첫 번째 문자열을 기준으로 for
문을 돌면서 하나씩 다른 문자열에 포함 되는지 확인합니다.
포함되는지 확인하는 방법은 includes()를 사용합니다.
포함 된다면 우리가 반환할 변수 result
에 담고, 다음 문자로 넘어가면서 확인합니다.
자세한 설명은 코드에 주석으로 남기겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
const longestCommonPrefix = function(strs) {
let common = ''; // 현재 작업중인 공통된 문자열
const commonArray = []; // 공톤된 문자열들을 저장한 배열
if (strs.length === 0) return result; // 입력받은 배열 strs가 빈 배열이면 ''을 반환합니다.
const firstStr = strs[0]; // 어떤 문자열을 사용해도 상관없지만 그냥 첫 번째 문자열을 기준으로 잡습니다.
for (let i = 0; i < firstStr.length; i++) { // 첫 번째 문자열을 돌면서 한 문자씩 가져옵니다.
common = common + firstStr[i]; // 우리가 반환하기 위해 가장 긴 문자열을 만들고 있는 common 변수와 새로운 문자를 합칩니다.
for (let str of strs) { // 입력받은 문자열 배열을 돌면서 변수 common를 포함하고 있는지 확인합니다.
if (!str.includes(common)) common = ''; // 만약 common이 포함 안되는 문자열이 있다면 이전 문자까지가 가장 긴 문자열이기 때문에 빈 문자열을 만듭니다.
}
if (common) commonArray.push(common); // 공통된 문자열이 있다면 공통된 문자열을 저장하는 배열에 저장합니다.
}
commonArray.sort((a,b) => b.length - a.length) // 우리가 저장한 공통된 문자열의 배열을 문자열이 가장 긴 순서로 정렬합니다.
return commonArray[0] || ''; // commonArray의 첫 요소가 가장 긴 공통된 문자열이기 때문에 반환합니다.
};
console.log(${longestCommonPrefix(["refloweraaaa","flowaaaa","flightaaaa"])});
// OUTPUT: aaaa
|
LeetCode
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:
1
2
|
Input: strs = ["flower","flow","flight"]
Output: "fl"
|
Example 2:
1
2
3
4
|
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 lower-case English letters.