문제
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.
풀이
class Solution {
public:
bool isPalindrome(string s) {
int l = 0, r = s.size() - 1;
while(l < r) {
while(l < r && !isAlphanumeric(s[l])) l++;
while(l < r && !isAlphanumeric(s[r])) r--;
if(tolower(s[l]) != tolower(s[r])) return false;
l++; r--;
}
return true;
}
bool isAlphanumeric(char c) {
return (
'A' <= c && c <= 'Z' ||
'a' <= c && c <= 'z' ||
'0' <= c && c <= '9'
);
}
};
투포인터가 양쪽에서 가운데로 모이며 non-alphanumeric 문자는 무시한다.
'Problem Solving > LeetCode' 카테고리의 다른 글
[LeetCode - 15] 3Sum - C++ (0) | 2025.01.19 |
---|---|
[LeetCode - 167] Two Sum II - Input Array Is Sorted - C++ (0) | 2025.01.19 |
[LeetCode - 238] Products of Array Discluding Self - C++ (0) | 2024.05.31 |
[LeetCode - 271] encode and decode strings - C++ (0) | 2024.05.30 |
[LeetCode - 916] Decoded String at Index - C++ (0) | 2023.09.30 |