难度:简单
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
题目分析:
思路很简单,就是先遍历一遍整个字符串,将大写字母变成小写,将不是字母的字符排除。然后检查是否是回文串即可。
参考代码:
class Solution {
public:
bool isPalindrome(string s) {
if (s.empty())
return true;
int count = 0;
for (int i = 0; i < s.size(); i++)
{
while (i < s.size() && !(s[i] >= 'a' && s[i] <= 'z'))
{
if (s[i] >= 'A' && s[i] <= 'Z')
{
s[count] = s[i] - 'A' + 'a';
count++;
i++;
}
else if (s[i] >= '0' && s[i] <= '9')
{
s[count] = s[i];
count++;
i++;
}
else{
i++;
}
}
if (i < s.size())
{
s[count] = s[i];
count++;
}
}
//回文字符串要分奇偶的,类似于“aba”,“baab”。并且要注意除2向下取
if (count % 2 == 0)
{
return check(s, count, count / 2 - 1, count / 2);
}
else{
return check(s, count, count / 2, count / 2);
}
}
bool check(string& s, int end, int p1, int p2)
{
while (p1 >= 0 && p2 < end)
{
if (s[p1--] != s[p2++])
{
return false;
}
}
return true;
}
};