반응형
문제
풀이
주어진 문자열이 팰린드롬인지 확인하는 문제이다.
- 팰린드롬은 뒤집어도 같은 말이 되는 단어 또는 문장을 말한다.
문제에서 팰린드롬인지 확인할 때 알파벳과 숫자만을 대상으로 하고 대소문자를 구분하지 않는다고 했다.
우선 주어진 문자열을 다 소문자로 바꾼다.
그리고 정규식으로 알파벳과 숫자가 아닌 불필요한 문자를 제거한다.
이제 for 문을 돌면서 왼쪽 인덱스의 값과 오른쪽 인덱스의 값이 같은지를 확인한다.
왼쪽은 한 칸씩 오른쪽으로, 오른쪽은 한 칸씩 왼쪽으로 이동하면서 비교한다.
만약 비교한 값이 다르면 팰린드롬이 아니고 모두 같으면 팰린드롬이다.
코드
class Solution {
public boolean isPalindrome(String s) {
s = s.toLowerCase();
String alphanumericInput = s.replaceAll("[^A-Za-z0-9]", "");
char[] targets = alphanumericInput.toCharArray();
int left = 0;
int right = targets.length-1;
for(int idx=0; idx < targets.length/2; idx++){
if(targets[left++] != targets[right--]){
return false;
}
}
return true;
}
}
제출하고 확인해보니깐 작년에 Go언어로 제출한 풀이가 존재했다.
확인해보니깐 역시 똑같은 방법으로 풀었었다.
사람 쉽게 안 변하는 것 같다.
func isPalindrome(s string) bool {
reg, err := regexp.Compile("[^a-zA-Z0-9]+")
if err != nil {
log.Fatal(err)
}
processedString := strings.ToLower(reg.ReplaceAllString(s, ""))
maxIdx := len(processedString) - 1
for idx := 0; idx <= maxIdx; idx++ {
if processedString[idx] != processedString[maxIdx-idx] {
return false
}
}
return true
}
참고
반응형