判断字符串是否为有效回文(只考虑字母和数字)。
思路:用两个变量,一个指向头部一个指向尾部,分别从 字符串两端遍历,遇到非字母或数字就跳过,若遍历完字符串首尾字符都相同则返回true,否则返回false。
注意:空字符串返回true;
对大小写不敏感,用toupper()或tolower();
跳过非字母、非数字用isalnum()。
补充知识点:if语句与while(包括while{判断条件}do{执行语句}和do{执行语句}while{判断条件})语句的区别。
1、if用于判断和分支语句,while用于循环语句;
2、if语句只进行一次判断,while语句运行完毕自动返回继续判断while中的条件是否符合(不止一次判断);
3、if语句运行完毕后,接着运行下面的语句,while中的执行语句运行完毕后,还要进行继续判断条件是否符合循环条件,根据判断的条件,返回执行语句(条件符合,继续循环)或继续运行下面的程序(条件不符合,跳出循环)。

#include <iostream>
#include "ctype.h"
using namespace std;
class Solution{
public:
bool isPalindrome(string s){
int first,last;
first = 0;
last = s.size()-1;
while(first <= last){
while(!(isalnum(s[first])) && first<last){ //此处注意if与while的区别
first++;
}
while(!(isalnum(s[last])) && first<last){
last--;
}
if(toupper(s[first]) != toupper(s[last])){
return false;
}
first++;
last--;
}
return true;
}
};
int main(){
string s = "A man, a plan, a canal: Panama";
Solution solute;
bool m = solute.isPalindrome(s);
cout << m << endl;
}
本文介绍了一种使用双指针法判断字符串是否为有效回文的方法,特别关注于字母和数字,忽略大小写及非字母数字字符。通过具体C++代码实现,详细解释了如何从字符串两端开始比较字符,直至中间位置,确保了对大小写不敏感且能跳过非字母、非数字字符。

693

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



