Valid Palindrome
https://leetcode.com/problems/valid-palindrome/description/ | Easy |
Условие
Дана строка s. Необходимо определить, является ли она палиндромом, игнорируя пробелы, знаки препинания и различие между верхним и нижним регистром.
Примеры
Input:
“A man, a plan, a canal: Panama”Output:
trueExplanation:
Строка является палиндромом, если игнорировать символы, не являющиеся буквами и цифрами, и регистр.
Input:
“race a car”Output:
falseExplanation:
Строка не является палиндромом.
Input:
” “Output:
trueExplanation:
Пустая строка считается палиндромом.
Решение
fun isPalindrome(s: String): Boolean {
var left = 0 // Указатель на начало строки
var right = s.length - 1 // Указатель на конец строки
while (left < right) {
// Пропуск неалфавитных и нецифровых символов с начала строки
while (left < right && !s[left].isLetterOrDigit()) {
left++
}
// Пропуск неалфавитных и нецифровых символов с конца строки
while (left < right && !s[right].isLetterOrDigit()) {
right--
}
// Сравнение символов в нижнем регистре
if (left < right && s[left].lowercaseChar() != s[right].lowercaseChar()) {
return false
}
left++ // Перемещение указателя вправо
right-- // Перемещение указателя влево
}
return true // Если все сравнения прошли успешно, строка является палиндромом
}
Временная сложность
O(n), где n — длина строки, так как требуется пройти по всем символам строки.
Пространственная сложность
O(1), так как дополнительная память не используется для хранения данных.