继续刷LeetCode,第125题,判断一个字符串是否是有效的回文数,其中字母和数字为有效。
分析:
通过从前往后遍历的方式,可以首先剔除掉无效的符号,然后再判断是否回文,判断是否回文的时候可以通过前后两个指针的值对比大小,直到两个指针指向中间位置。但是这个办法需要占用空间,因此也可以在前后两个指针遍历的时候,判断是否符号有效,无效的话继续遍历,有效的话就比较大小,这样可以节省空间。
问题:
1、注意数字0与字母P的ascall码值相差32;
2、可以尝试使用isalnum、tolower等函数。
附上代码1:
class Solution {
public:
bool isPalindrome(string s) {
string tmp="";
for(int i=0;i<s.size();i++)
{
if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9'))
tmp+=s[i];
}
for(int j=0;j<(tmp.size())/2;j++)
{
if(tmp[j]>='0'&&tmp[j]<='9'&&tmp[j]!=tmp[tmp.size()-1-j])
return false;
else if(tmp[j]!=tmp[tmp.size()-1-j]&&abs(tmp[j]-tmp[tmp.size()-1-j])!=32)
return false;
}
return true;
}
};
附上简洁的代码2:
bool isPalindrome(string s) {
int start=0, end=s.length()-1;
while(start<end) {
if (!isalnum(s[start])) start++;
else if (!isalnum(s[end])) end--;
else {
if (tolower(s[start++])!=tolower(s[end--])) return false;
}
}
return true;
}
本文详细解析了LeetCode第125题——判断字符串是否为回文数的问题,提供了两种解决方案,一种是通过创建新字符串来过滤无效字符并检查回文,另一种是在原字符串上直接进行比较,避免额外空间开销,同时介绍了如何使用isalnum和tolower函数简化代码。

被折叠的 条评论
为什么被折叠?



