[LeetCode] - E - Valid Palindrome

2023. 8. 27. 01:09· 알고리즘/문제
목차
  1. 🔥 - Java 코드
  2. 🔥 - Java 코드

https://leetcode.com/problems/valid-palindrome/description/?envType=study-plan-v2&envId=top-interview-150

 

Valid Palindrome - LeetCode

Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric cha

leetcode.com

 

📌 - 처음 생각한 풀이

  1. 대문자 알파벳일 경우 소문자로 변경하고 sb에 더해주고
  2. 소문자일 경우 그대로 append
  3. 숫자일 경우 그대로 append
  4. 이 외의 경우에는 제거 하는 방식으로 sb를 만들어주고 해당하는 문자를 처음부터 size/2만큼 앞뒤 비교하면서 다르면 false;

예상은 했지만, 시간과 메모리 전부 최악..

🔥 - Java 코드


  
import java.util.*;
class Solution {
public boolean isPalindrome(String s) {
StringBuilder sb = new StringBuilder();
for(int i =0;i<s.length();i++){
int number = s.charAt(i) - 0;
System.out.println(number);
if(number >= 65 && number <=90){
number += 32;
sb.append((char)number);
}else if(number >=97 && number <= 122){
sb.append((char)number);
}else if(number >=48 && number <= 57 ){
sb.append((char)number);
}
}
System.out.println(sb);
for(int i =0;i<sb.length()/2;i++){
if(sb.charAt(i) != sb.charAt(sb.length()-i-1)){
return false;
}
}
return true;
}
}

 

📌- 개선된 방식

  1. 위의 방식과 같이 아스키 코드로 대문자 소문자 나눔
  2. 오른쪽, 왼쪽을 투포인터로 관리하면서 하나씩 증가 및 감소 시키면서 비교
  3. 다를 경우 return false;

-> 이 방식으로 하게 되면 위의 경우처럼 하나의 문자열로 다시 만들어 줄 필요가 없어서 속도, 메모리에서 굉장히 효율적이다.

🔥 - Java 코드

 


  
import java.util.*;
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.isEmpty()) {
return true;
}
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right &&
!((s.charAt(left) >= 65 && s.charAt(left) <= 90) ||
(s.charAt(left) >= 97 && s.charAt(left) <= 122) ||
(s.charAt(left) >= 48 && s.charAt(left) <= 57))) {
left++;
}
while (left < right &&
!((s.charAt(right) >= 65 && s.charAt(right) <= 90) ||
(s.charAt(right) >= 97 && s.charAt(right) <= 122) ||
(s.charAt(right) >= 48 && s.charAt(right) <= 57))) {
right--;
}
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
return true;
}
}
  1. 🔥 - Java 코드
  2. 🔥 - Java 코드
'알고리즘/문제' 카테고리의 다른 글
  • [LeetCode] - M - Add Two Numbers
  • [LeetCode] -E- Search Insert Position
  • [LeetCode] - M - Jump Game
  • [LeetCode] - M - Best Time To Buy And Sell Stock 2
Casteira
Casteira
할 뿐
Casteira
SpongeCake
Casteira
전체
오늘
어제
  • __Main__ (104)
    • 알고리즘 (65)
      • 개념 (6)
      • 문제 (58)
    • 컴퓨터 구조 (9)
      • 자료 구조 (2)
      • OS (7)
    • 웹 (1)
      • 자바 (1)
      • 스프링 (5)
      • SQL (0)
    • 기록 (4)
      • 포트폴리오 (2)
    • 정글 (18)
      • TIL (17)

블로그 메뉴

  • 🗒️ 깃허브
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • annotation
  • spring
  • 백준
  • dp
  • 크래프톤
  • 정글
  • 코딩테스트
  • java
  • 크래프톤 정글
  • 백준 골드
  • framework
  • springboot

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
Casteira
[LeetCode] - E - Valid Palindrome
테마상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.