链接 https://leetcode.cn/problems/XltzEq/题目 给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。 示例: 输入: s = "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串 输入:s = "0P" 输出:false 解释:"op"不是回文串 思路: 字符串中可能会含有数字、大写字母、小写字符、空格、符号等,把数字和字母存下来,其余舍去。此外,因为字母不分大小写,所以大写字母要转换为小写字母。注意: tolower函数,把字母字符转换为小写,非字母字符不处理;isalnum函数,判断字符变量是否为数字或者字母,若是则返回非零,否则返回零;ASCII 代码: class Solution { public: bool isPalindrome(string s) { //第一种,使用ASCII int i,j; vector<char> ans; //储存转换后的字符串 for(i=0;s[i]!='\0';i++){ //大写字母转换为小写字母 if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32; //如果为有效字符(数字和字母),存入ans字符串 if((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')){ ans.push_back(s[i]); } } //本题把空字符串判为回文串,返真 if(ans.size()==0) return true; //进行回文串判断 for(i=0,j=ans.size()-1;i<j;i++,j--) if(ans[j]!=ans[i]) return false; return true; //第二种,使用特殊函数 string ans; for(char ch:s){ if(isalnum(ch)){ ans+=tolower(ch); } } //倒置 string ans_rev(ans.rbegin(),ans.rend()); return ans==ans_rev; } };