01. 유효한 팰린드롬
📌문제
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
- 예제1
📝입력
`A, man, a paln, a canal: Panama`
💻출력
`true`
- 예제2
📝입력
`race a car`
💻출력
`false`
📌풀이
1. 정규식을 활용한 방법 (656ms, 43.5mb)
public boolean solution2(String str){
boolean answer = false;
str = str.replaceAll("[^0-9a-zA-Z]","");
String reversStr = new StringBuilder(str).reverse().toString();
if(str.equalsIgnoreCase(reversStr)) answer = true;
return answer;
}
}
- 정규식을 이용해서 영문자와 숫제를 제외한 모든 값을 없애줌
- StringBuilder의 reverse를 이용해서 뒤집어준다.
- 대소문자 구분없이 뒤집은 문자열과 파라미터로 받은 문자열을 비교한다.
2. Deque를 활용한 방법 (6ms, 42.7mb) ⭐
public boolean solutionDeque(String str){
Deque<Character> deque = new ArrayDeque();
for(char c : str.toCharArray()){
if(!Character.isDigit(c) && !Character.isLetter(c)) continue;
deque.add(Character.toLowerCase(c));
}
while(deque.size()>1){
if( !deque.poll().equals(deque.pollLast()) ) return false;
}
return true;
}
- 앞에서도 뒤에서도 값을 뺄 수 있는 자료구조 Deque
- 문자 하나씩 받아오면서 영문자, 숫자만 deque에 add해준다.
- deque에 값이 없을 때까지 반복문을 돌면서 앞에서 뒤에서 값을 빼면서 비교한다.
'Algorithm > PTUStudy' 카테고리의 다른 글
2주차. 문자열 조작(가장 긴 팰린드롬 부분 문자열) (0) | 2023.01.16 |
---|---|
2주차. 문자열 조작(그룹 애너그램) (0) | 2023.01.16 |
2주차. 문자열 조작(가장 흔한 단어) (0) | 2023.01.16 |
1주차. 문자열 조작(로그파일 재정렬) (0) | 2023.01.16 |
1주차. 문자열 조작(문자열 뒤집기) (0) | 2023.01.16 |