-
[LeetCode/JAVA] 125. Valid PalindromeETC/Algorithm 2023. 8. 27. 23:47
문제
모든 대문자 문자열을 소문자로 변경하고 영문, 숫자가 아닌 문자는 모두 제거한 문자열이 펠린드롬 문자열이라면 참을 반환하고 아니라면 거짓을 반환하는 문제이다.
palindrome 펠린드롬이란?
앞 뒤를 뒤집어서 읽어도 똑같은 문장을 말한다.풀이
일단 문자열에 필요없는 특수문자, 띄어쓰기 등을 없애야 원하는 문자열을 만들 수 있다고 판단해서 정규식을 사용해 문자열을 변환해준 다음, 소문자만 비교해야하기 때문에 toLowerCase() 메소드를 사용해서 전체 문자열에 대문자를 없애줬다.
펠린드롬의 경우 문자열을 뒤집어서 비교를 진행하고 서로 다른지 비교를 해야했는데, String 클래스의 길이를 사용하여 구현할 까 생각했지만 StringBuilder 클래스를 사용하면 reverse() 메소드로 간단하게 뒤집을 수 있다는게 생각나서, StringBuilder에 문자열을 입력한 다음 reverse() 메소드를 사용해 문자열을 뒤집어 줬다.
이후 for문을 통해 한 자리씩 비교를 진행해서 중간에 서로 다른 문자가 발견될 경우 바로 거짓을 반환하게 해줬다.
코드
class Solution { public boolean isPalindrome(String s) { String forward = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase(); StringBuilder sb = new StringBuilder(); String backward = sb.append(forward).reverse().toString(); for(int i = 0; i < forward.length(); i++){ if(forward.charAt(i) != backward.charAt(i)){ return false; } } return true; } }
구현을 하기위해 편하게 코드를 짜서 그런지.... 결과는 좋지 않았다....