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
}
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] Longest Substring Without Repeating Characters - (Kotlin) (0) | 2023.03.01 |
---|---|
[LeetCode] Majority Element - (Kotlin) (0) | 2023.01.20 |
[LeetCode] Convert Sorted Array to Binary Search Tree (Kotlin) (0) | 2023.01.15 |
[LeetCode] Symmetric Tree (Kotlin) (0) | 2023.01.14 |
[LeetCode] Merge Sorted Array (Kotlin) (0) | 2023.01.14 |
댓글