You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
https://leetcode.com/problems/valid-palindrome/description/ |
1 year ago | |
|---|---|---|
| .. | ||
| index.ts | 1 year ago | |
| isPalindrome.test.ts | 1 year ago | |
| isPalindrome.ts | 1 year ago | |
| readme.md | 1 year ago | |
readme.md
isPalindrome
описание задачи
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
Example 1:
- Input: s = "A man, a plan, a canal: Panama"
- Output: true
- Explanation: "amanaplanacanalpanama" is a palindrome.
Example 2:
- Input: s = "race a car"
- Output: false
- Explanation: "raceacar" is not a palindrome.
Example 3:
- Input: s = " "
- Output: true
- Explanation: s is an empty string "" after removing non-alphanumeric characters. Since an empty string reads the same forward and backward, it is a palindrome.
Constraints:
1 <= s.length <= 2 * 105- s consists only of printable ASCII characters.
тест кейсы
текстовое описание решения
- я заведу два указателя которые поставлю в начало и в конец и буду двигаться в цикле пока эти указатели не пересекуться
- в цикле я буду получать значение этих двух указателей и проверять если это буква я буду их сравнивать приведя к нижнему регистру
- если они равны я буду двигать указатели дальше
- если они не равны я буду возвращать false
- перед сравнением нужно проверить что оба символа у меня буквы по условию задачи
- если один из указателей не буква я буду двигать этот указатель пока не встречу букву
- для проверки буква это или нет я заведу вспомогательную функцию в которой буду текущий символ приводить к нижнему и верхнему регистру и сравнивать если их значения не равны значит это буква
ассимптотическая оценка
| Description | Estimation |
|---|---|
| time: | O(n) |
| mem: | O(n) |
time
| Description | Time |
|---|---|
| анализ и сбор информации | 04:18 |
| обдумываение решения и формулировка решения | 05:40 |
| имплементация | 10:14 |
| исправление ошибок | 36:12 |
| полное время затраченое на решение | 17:03 |
журнал ошибок
- забыл инкрементировать и декрементировать указатели
- не учел числа
- поправил числа слетел первый кейс
- заменил проверку чисел на регулярное выражение
code
typescript
function isLetter(c: string) {
if (/\d/.test(c)) return true;
return c.toLowerCase() != c.toUpperCase();
}
function isPalindrome(s: string): boolean {
let L = 0;
let R = s.length - 1;
while (L <= R) {
let lChar = s[L].toLowerCase();
let rChar = s[R].toLowerCase();
if (!isLetter(lChar)) {
L++;
continue;
}
if (!isLetter(rChar)) {
R--;
continue;
}
if (lChar !== rChar) return false;
L++;
R--;
}
return true;
};