본문 바로가기
LeetCode/보관함

[LeetCode][Kotlin] 680. Valid Palindrome II

by jinwo_o 2024. 9. 30.

680. Valid Palindrome II

Given a string s, return true if the s can be palindrome after deleting at most one character from it.

문자열 s가 주어지면, 최대 한 문자를 삭제한 후 s가 회문일 수 있으면 true를 반환합니다.

 

Example 1:

Input: s = "aba"

Output: true

 

Example 2:

Input: s = "abca"

Output: true

Explanation: You could delete the character 'c'.

 

Example 3:

Input: s = "abc"

Output: false

 

Constraints:

  • 1 <= s.length <= 10^5
  • s consists of lowercase English letters.

코드

  • 두 포인터가 가리키는 두 문자가 같지 않으면 회문이 아니기 때문에 한 문자를 삭제해야 한다.
class Solution {
    fun validPalindrome(s: String): Boolean {
        var l = 0
        var r = s.lastIndex

        while (l < r) {
            if (s[l] != s[r]) {
                val skipL = s.substring(l + 1..r)
                val skipR = s.substring(l, r)
                return (skipL == skipL.reversed() || skipR == skipR.reversed())
            }

            l++
            r--
        }

        return true
    }
}