题目:
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.
题意:
给定一个字符串,判断该字符串是否是回文串,只考虑字符串里的字母字符而且不管大小写。
思路:
直接定义两个首尾两个指针变量left、right,判断每个指针变量的值,如果不是字符则左边向右移,右边向左移。
代码:C++版:20ms
class Solution { public: bool isPalindrome(string s) { transform(s.begin(), s.end(), s.begin(), ::tolower); auto left = s.begin(), right = prev(s.end()); while (left < right) { if(!::isalnum(*left)) ++left; else if (!::isalnum(*right)) --right; else if (*left != *right) return false; else { left++; right--; } } return true; } };
class Solution { public: bool isPalindrome(string s) { int left = 0, right = s.size() - 1; while (left < right) { if (!isalnum(s[left])) left++; else if (!isalnum(s[right])) right--; else { if (tolower(s[left++]) != tolower(s[right--])) return false; } } return true; } };