https://leetcode.com/problems/valid-palindrome-ii | Easy |
---|
Дана строка s
. Определите, можно ли сделать её палиндромом, удалив не более одного символа.
Input:
s = "aba”Output:
true
Input:
s = "abca”Output:
trueExplanation:
Удалив символ 'b' или 'c', строка становится палиндромом.
Input:
s = "abc”Output:
false
fun validPalindrome(s: String): Boolean {
fun isPalindrome(low: Int, high: Int): Boolean {
var i = low
var j = high
while (i < j) {
if (s[i] != s[j]) return false // Если символы не равны, это не палиндром
i++
j--
}
return true
}
var left = 0
var right = s.length - 1
while (left < right) {
if (s[left] != s[right]) {
// Проверяем, станет ли строка палиндромом, если удалить символ слева или справа
return isPalindrome(left + 1, right) || isPalindrome(left, right - 1)
}
left++
right--
}
return true // Если проверка завершилась без удаления, строка уже палиндром
}
O(n), где n — длина строки, так как каждая проверка требует линейного прохода.
O(1), так как используется фиксированное количество переменных.