[leetcode] 125. Valid Palindrome

반응형

문제

 


풀이

주어진 문자열이 팰린드롬인지 확인하는 문제이다.

  • 팰린드롬은 뒤집어도 같은 말이 되는 단어 또는 문장을 말한다.

문제에서 팰린드롬인지 확인할 때 알파벳과 숫자만을 대상으로 하고 대소문자를 구분하지 않는다고 했다.

 

 

우선 주어진 문자열을 다 소문자로 바꾼다.

그리고 정규식으로 알파벳과 숫자가 아닌 불필요한 문자를 제거한다.

이제 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
}

 

 


참고