题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
问题分析
- 回文串:正读反读都一样;
- 这个字符串处理需要的就是字母、数字两种,其它的不用。所以判断时C++用的方法是:isalnum();Java可以用 Character.isLetterOrDigit(s.charAt(a))。其他部分一样;
- 处理方式也就是两个指针,一个从开头开始,一个从末尾开始。遇到非字母、数字继续往前。
待修改代码
应该把 if 改成 while,不满足条件的字符可能连续出现。
class Solution {
public:
bool isPalindrome(string s) {
if (s.length() == 0) return true;
int a = 0, b = s.length();
while (a < b) {
if (a < b && !isalnum(s[a])) a++;
if (a < b && !isalnum(s[b])) b--;
if (a < b && tolower(s[a]) != tolower(s[b])) return false;
else
{
a++;
b--;
}
}
return true;
}
};
总结
我怎么感觉自己最近什么都不会,快被自己菜哭了。。