题目:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,"A man, a plan, a canal: Panama"
is a palindrome."race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
代码:
class Solution { public: bool isPalindrome(string s) { std::transform(s.begin(), s.end(), s.begin(),::tolower); std::string::iterator begin = s.begin(); std::string::iterator end = s.end(); while ( begin < end ) { if ( !::isalnum(*begin) ){ ++begin; } else if ( !::isalnum(*end) ){ --end; } else if ( *begin != *end ){ return false; } else{ ++begin; --end; } } return true; } };
Tips:
1. isalnum transform函数省去了不少篇幅
2. 双指针技巧,从两头往中间逼近,不用判断奇数偶数,代码很简洁。
时间: 2024-12-28 10:49:02