练习题22-验证回文串

原题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true

示例 2:
输入: “race a car”
输出: false

思路:
1.先用for循环遍历原字符串,用函数将字母和数字分别提取出来存放在另一个字符串
2.用翻转函数将保存的字符串反转存放在另一个数组中
3.返回两个字符串的比较

代码(函数实现):

class Solution {
public:
    bool isPalindrome(string s) {
        string s1;
        for (char c: s) {
            if (isalnum(c)) {
                s1 += tolower(c);
            }
        }
        string s1_rev(s1.rbegin(), s1.rend());
        return s1 == s1_rev;
    }
};

注意:
1.
for (char c: s) 相当于
for( int i = 0; i < s.length(); i++)
{
c=s[i];
}
2.isalnum©函数是判断字符是否是字母或者数字
3.tolower©函数是将字母大写转小写
4. string s1_rev(s1.rbegin(), s1.rend());是反转函数,将s1从尾部到头部进行反转

rbegin
语法:const reverse_iterator rbegin();
解释:rbegin()返回一个逆向迭代器,指向字符串的最后一个字符。

rend
语法:const reverse_iterator rend();
解释:rend()函数返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)。

参考了
https://blog.csdn.net/z2014jw/article/details/50810569

练习题21-数组加一

你可能感兴趣的:(练习题)