一、问题描述
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
二、问题分析
遍历字符串,取出所有的字母转为小写和数字放进另一个数组中,reverse这个数组,看reverse前后是否相同。关键在于C++对于字符处理函数的使用
isalpha()判断字符是否为字母
tolower()字符转小写
isdigit()判断字符为数字
s1.compare(s2)比较两个字串
三、代码实现
#include <algorithm>
class Solution {
public:
bool isPalindrome(string s) {
string t;
for(char c:s)
{
if(isalpha(c) || isdigit(c))
t.push_back(tolower(c));
else
continue;
}
if(t.size() == 0)
return true;
string tmp = t;
reverse(t.begin(), t.end());
if(tmp.compare(t))
return false;
else
return true;
}
};