给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
string类型获取长度:str.length()
isalnum() 用以判断字符是否是数字和字母
tolower() 把字母转为小写
思路:设定两个指针,第一个从前往后走,第二个从后往前走,一直走到交汇处,看所指元素是否都一致。
class Solution { public: bool isPalindrome(string s) { int len = s.length() - 1; int i = 0; while(i <= len){ if(!isalnum(s[i])){ ++i; continue; } if(!isalnum(s[len])){ --len; continue; } if(tolower(s[len--]) != tolower(s[i++])){ return false; } } return true; } };
特征:回文 解法:前后对比
思路:翻转字符串,然后比较原字符串和反转后的字符串是否一致
class Solution { public: bool isPalindrome(string s) { string str; for(int i : s){ if(isalnum(i)){ str += tolower(i); } } string str_con(str.rbegin(), str.rend()); return str_con == str; } };
特征:回文字符串 解法:string str_con(str.rbegin(), str.rend());