본문 바로가기
Algorithm/LeetCode

[LeetCode] Valid Palindrome - (Kotlin)

by dvid 2023. 1. 16.

https://leetcode.com/problems/valid-palindrome

주어진 문자열에서 숫자와 알파벳만 남겨 문자열을 뒤집어도 같은지 확인하는 문제이다 (펠린드롬).

처음에는 반복문을 통해 풀었지만, 정규식을 이용하니 코드가 훨씬 간결해졌다.

기존 코드

fun isPalindrome(ss: String): Boolean {
    val s = ss.uppercase().trim()
    var l = 0
    var r = s.lastIndex

    while (l <= r) {
        var c1 = s[l]
        while (l < s.lastIndex && !isAlphanumeric(c1)) {
            c1 = s[++l]
        }

        var c2 = s[r]
        while (r > 0 && !isAlphanumeric(c2)) {
            c2 = s[--r]
        }

        if (isAlphanumeric(c1) && isAlphanumeric(c2) && c1 != c2) {
            return false
        }

        l++
        r--
    }

    return true
}

fun isAlphanumeric(c: Char): Boolean {
    return c.isDigit() || c.isLetter()
}

정규식 사용

fun isPalindrome(s: String): Boolean {
    val replace = s.toUpperCase().replace("[^A-Z0-9]".toRegex(), "")
    val reversed = replace.reversed()

    return replace == reversed
}

 

댓글