Search
Duplicate
📒

[LeetCode Top 150] 02-1. Valid Palidrome - Easy

상태
완료
수업
Algorithm Solving
주제
LeetCode Top Interview 150
4 more properties
참고

문제해설

NOTE
입력값 ⇒ 문자열
출력값 ⇒ 입력값으로 제공받은 문자열이 회문인지 아닌지

문제 로직고민

NOTE
제공 받은 문자열이 회문이라면, 중앙을 지점으로 대칭되는 문자열 끼리 같아야한다.
ex) bob의 경우 처음과 끝의 b가 같다.
시작과 끝 idx를 계속해서 비교해서 둘의 포인터가 엇갈리거나 겹치는 순간까지 같다면 그 문자열은 팰린드롬이다.
만약 순회하는 문자가 영어나 숫자가 아니라면, 다음 문자로 넘어간다.
단 넘어갈때, idx는 시작 idx가 끝 idx보다 항상 작아야한다.

작성코드

NOTE
class Solution { public boolean isPalindrome(String s) { int startIdx = 0; int lastIdx = s.length() - 1; char[] array = s.toCharArray(); while(startIdx < lastIdx){ while(startIdx < lastIdx && !Character.isAlphabetic(array[startIdx]) && !Character.isDigit(array[startIdx])){ startIdx++; } while(startIdx < lastIdx && !Character.isAlphabetic(array[lastIdx]) && !Character.isDigit(array[lastIdx])){ lastIdx--; } if(Character.toUpperCase(array[startIdx++]) != Character.toUpperCase(array[lastIdx--])) return false; } return true; } }
Java
복사

정답코드

NOTE
class Solution { public boolean isPalindrome(String s) { int left = 0; int right = s.length() - 1; while (left < right) { char leftChar = s.charAt(left); char rightChar = s.charAt(right); if (!Character.isLetterOrDigit(leftChar)) { left++; continue; } if (!Character.isLetterOrDigit(rightChar)) { right--; continue; } if (Character.toLowerCase(leftChar) != Character.toLowerCase(rightChar)) { return false; } left++; right--; } return true; } }
Java
복사
메모리를 가장 적게 사용하는 코드
큰 로직은 동일하나 더 효율적으로 작성한 부분이 보인다.
charArray를 만들지 않고, charAt을 사용함
문자와 숫자를 판별할때 isLetterOrDigit() 통합함수 사용