일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 항해99
- typeScript
- REACT
- 프론트엔드
- Ai
- 코린이
- TS
- D반8조
- 팀워크최고
- 알고리즘기초주차
- 맥린이
- 멍친구
- 실전프로젝트
- ReactNative
- 달리기반
- 알pdf #파일탐색기미리보기안될때
- 웹개발종합반
- ChatGPT
- 사전준비
- 챗GPT
- 스파르타코딩클럽
- Programmers
- NotionAI
- TDD
- 7기
- 프로그래머스
- rn
- 리액트
- 필수강의
- Expo
- Today
- Total
FrontEnd :-)
[LeetCode-JS] Longest Common Prefix 본문
🙋 문제: 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.
🅰️ 풀이:
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
let prefix = "";
prefix = strs[0]
for(let i = 0; i < strs.length; i++){
while (strs[i].indexOf(prefix) !== 0){
prefix = prefix.substring(0, prefix.length -1);
}
}
return prefix
};
>> for문에 while 적용하면 될 것 같다는 생각까지는 했는데, indexOf 활용과 문자를 뒤에서부터 자르는 건 생각하지 못했다.. 내가 생각한 게 거의 없는 거지.. 풀이 검색했다 😢
>> strs 배열의 첫 번째 문자를 기준으로, 나머지 문자들에 같은 문자가 있는지 indexOf로 판단(있으면 겹치는 문자의 첫 번째 index 값, 없으면 -1 반환)하고, while 반복문을 돌려서, strs[0] 의 문자를 뒤에서부터 줄여가며 비교.
>> 배열에 문자가 하나만 있으면 for문까지 갈 필요가 없으므로, 맨 위에 아래 코드를 추가했다.
if(strs.length === 1) return strs[0];
✅ 다른 사람 풀이:
var longestCommonPrefix = function(strs) {
if(strs.length == 0) return '';
var result = '';
for(var i = 0; i < strs[0].length; i++) {
if (strs.every(function (item) {
return strs[0][i] === item[i];
})) {
result += strs[0][i];
} else {
break;
}
}
return result;
};
>> 조건에서 strs.length 가 1보다 크다고 했는데, 여러 풀이에서 if(strs.length == 0) return ''; 이 부분이 포함되어 있어서 의문. 문제 조건이 나중에 보완된건가??
>> every 메서드 공부해보자 :
every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다. Boolean 값을 반환합니다.
var longestCommonPrefix = function(strs) {
var result='';
for(var i=0; i<strs[0].length; i++) {
for(var j=0; j<strs.length; j++){
if(i === strs[j].length || strs[0][i] !== strs[j][i])
return result;
}
result = result+strs[0][i];
}
return result;
};
>> 맨 처음 문제 보자 마자는 이중 for문을 생각했었지만 완성하지 못했는데... 참고.
>> i === strs[j].length 이 조건이 왜 들어가는지 이해가 안 된다... >= 도 아니고... 없애고 if(strs[0][i] !== strs[j][i]) 조건만 적용해도 Accepted, 통과함.
>> var는 지양하므로, let으로 대체할 수 있겠다.
'JavaScript > Algorithm' 카테고리의 다른 글
[LeetCode-JS] Merge Two Sorted Lists (0) | 2022.12.15 |
---|---|
[LeetCode-JS] Valid Parentheses (0) | 2022.12.10 |
[LeetCode-JS] Roman to Integer (0) | 2022.12.08 |
[LeetCode-JS] Palindrome Number (0) | 2022.12.07 |
[LeetCode-JS] Two Sum (0) | 2022.12.05 |