일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트 split()
- 엘리스
- 엘리스 AI 트랙 5기
- 프로그래머스
- 리트코드
- 개발일기
- 엘리스 ai 트랙
- RN 프로젝트
- 자바스크립트 날씨
- 자바스크립트 reduce()
- HTML
- 간단한 날씨 웹 만들기
- [파이썬 실습] 심화 문제
- 자바스크립트 sort()
- reactnativecli
- 프론트개발공부
- 날씨 웹 만들기
- [파이썬 실습] 기초 문제
- 부트캠프
- 개발공부
- 코드스테이츠
- [AI 5기] 연습 문제집
- 프론트개발
- leetcode
- 자바스크립트 날씨 웹 만들기
- [파이썬 실습] 중급 문제
- JavaScript
- 자바스크립트
- 삼항연산자
- 코딩부트캠프
- Today
- Total
개발조각
[리트코드] 5. Longest Palindromic Substring 본문
안녕하세요. 개발조각입니다.😊
이번 문제는 어려운 건 아닌데 풀다가 잘못 생각해서 헤맨ㅋㅋㅋ 그런 문제입니다.
https://leetcode.com/problems/longest-palindromic-substring/
Longest Palindromic Substring - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
해결방안
var longestPalindrome = function(s) {
let str = '';
let answer = s[0];
for(let i=1; i<s.length; i++){
str = s[i];
for(let j=1; j<=i; j++){
let [prev, next] = [s[i-j], s[i+j]];
if(prev === next){
str = prev + str + next;
if(str.length > answer.length) answer = str;
}else{
str = '';
break;
}
if(j === i) str = '';
}
}
let str2 = '';
let answer2 = '';
for(let i=1; i<s.length; i++){
for(let j=1; j<=i; j++){
let [prev, next] = [s[i-j], s[i+j-1]];
if(prev === next){
str2 = prev + str2 + next;
if(str2.length > answer2.length) answer2 = str2;
}else{
str2 = '';
break;
}
if(j === i) str2 = '';
}
}
return answer.length > answer2.length ? answer : answer2;
};
이번 문제는 코드가 길긴 한데 이해하시면 쉽게 풀 수 있는 문제인 것 같아요.
코드를 보시면 두 가지로 나누어서 풀었습니다.
1. 회문(Palindrome) 문자열의 길이가 홀수 일 경우
prev | 기준점 | next |
2. 회문(Palindrome) 문자열의 길이가 짝수 일 경우
prev-1 | prev | 기준점, next | next+1 |
크게 보면 기준점에 따라 비교하는 방식이랄까나
첫 번째 for문은 기준점을 찾기 위한 반복문이고
두 번째 for문은 기준점을 기준으로 기준점의 위치만큼 반복을 해주어 범위를 넓혀주는 방식입니다.
두 개가 구조는 비슷하지만
회문 문자열의 길이가 홀수, 짝수일 경우에 따라 조금 다르게 짰습니다.
1. 회문(Palindrome) 문자열의 길이가 홀수 일 경우
let str = ''; // j가 반복될 때마다 합쳐질 문자열
let answer = s[0];
for(let i=1; i<s.length; i++){
str = s[i];
for(let j=1; j<=i; j++){
let [prev, next] = [s[i-j], s[i+j]];
if(prev === next){
str = prev + str + next;
if(str.length > answer.length) answer = str;
}else{
str = '';
break;
}
if(j === i) str = ''; // 반복문이 끝나면 리셋
}
}
2. 회문(Palindrome) 문자열의 길이가 짝수 일 경우
let str2 = '';
let answer2 = '';
for(let i=1; i<s.length; i++){
for(let j=1; j<=i; j++){
let [prev, next] = [s[i-j], s[i+j-1]];
if(prev === next){
str2 = prev + str2 + next;
if(str2.length > answer2.length) answer2 = str2;
}else{
str2 = '';
break;
}
if(j === i) str2 = '';
}
}
return answer.length > answer2.length ? answer : answer2;
마지막으로 홀수일 경우 가장 긴 회문 문자열 길이와 짝수일 경우 가장 긴 회문 문자열을 비교하여
둘 중 긴 값을 반환해줍니다.
'알고리즘🅰 > 리트코드' 카테고리의 다른 글
[리트코드] 7. Reverse Integer (0) | 2022.09.12 |
---|---|
[리트코드] 6. Zigzag Conversion (0) | 2022.09.12 |
[리트코드] 4. Median of Two Sorted Arrays (0) | 2022.09.11 |
[리트코드] 3. Longest Substring Without Repeating Characters (0) | 2022.09.10 |
[리트코드] 9. Palindrome Number (0) | 2022.09.09 |