问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
**说明:**本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
代码
/*
先将str内的非字母删掉,然后将大写转化为小写
从尾到头将元素push进str2中
、比较两者大小
*/
bool ValidPalindrome(string &str)
{
auto it = str.begin();
while(it!=str.end())
{
if (!isalpha(*it))
{
it = str.erase(it);
}
else
{
if (*it >= 'A' && *it <= 'Z')
{
*it += 32;
}
it++;
}
}
string str2;
for (auto it1 = str.rbegin(); it1 != str.rend(); ++it1)
{
str2.push_back(*it1);
}
return str == str2;
}
int main()
{
string str = "A man, a plan, a canal: Panama";
if (ValidPalindrome(str))
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
getchar();
return 0;
}