๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๋ฌธ๋ฒ•

[LeetCode] 125. Valid Palindrome (ํ•ด์„, Kotlin ํ’€์ด)

์ ์ด 2023. 6. 26. 22:46
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

Palindrome ๋ฌธ๊ตฌ๋Š” ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๋ชจ๋“  ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พผ ํ›„, ์˜์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋“ค์„ ์ง€์› ์„ ๋•Œ, ์•ž๋’ค๋กœ ๋˜‘๊ฐ™์ด ์ฝํžŒ๋‹ค. Alphanumeric(์˜์ˆซ์ž)๋Š” ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ํฌํ•จํ•œ๋‹ค.

 

ํ’€์ด

1. ์ฝ”ํ‹€๋ฆฐ ํ™•์žฅํ•จ์ˆ˜๋ฅผ ๋ง˜๊ป ํ™œ์šฉํ•œ ํ’€์ด

fun isPalindrome(s: String): Boolean = s.lowercase().filter {
   it.isLetterOrDigit()
}.let {
    it == it.reversed()
}

๋‹จ ๋‘์ค„๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‹ค๋งŒ leetcode ์ฝ”ํ‹€๋ฆฐ ๋ฒ„์ „์ด ๋‚ฎ์•„์„œ์ธ์ง€ Deprecated๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•จ! (toLowerCase)

์‹œ๊ฐ„ ๋ณต์žก๋„: O(n), ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)

 

2. ํˆฌํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ํ’€์ด

fun isPalindromeTwoPointer(s: String): Boolean {
    var left: Int = 0
    var right: Int = s.length - 1

    while(left < right) {
        while(!s[left].isLetterOrDigit() && left < right) left ++
        while(!s[right].isLetterOrDigit() && right > left) right --

        if(s[left].lowercase() != s[right].lowercase()) return false

        left ++
        right --
    }

    return true
}

์‹œ๊ฐ„ ๋ณต์žก๋„: O(n), ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)

https://github.com/jeongum/algorithm/blob/master/LT_125_ValidPalindrome.kt

๋ฐ˜์‘ํ˜•