LeetCode 125. 验证回文串 | C++语言版

LeetCode 125. 验证回文串

题目描述

题目地址125. 验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
在这里插入图片描述

解题思路

思路一:使用内置函数
代码实现

C++

class Solution {
public:
    bool isPalindrome(string s) {
        //输入: s = "A man, a plan, a canal: Panama" 输出:true
        //使用C++内置函数

        //定义一个新数组
        string newS;
        
        for(auto ch:s){
            //islower() 判断字符是否是小写字母
            //isdigit() 判断字符是否是数字
            //isupper() 判断字符是否是大写字母
            //tolower() 将字符转换成小写字母
        
            //移除非字母字符,字母和数字都属于字母数字字符
            if(islower(ch) || isdigit(ch)){
                newS+=ch;
            }else if(isupper(ch)){
                newS+=tolower(ch);
            }
        }

        //再次定义一个新数组,用来存储反转后的字符串
        string reverseS=newS;
        //反转字符串
        reverse(reverseS.begin(),reverseS.end());
        //比较比较字符串和反转的字符串是否相同
        return (newS.compare(reverseS)==0);
    }
};
在这里插入代码片
运行结果
参考文章:

https://leetcode.cn/problems/valid-palindrome/solutions/1136949/zi-fu-chuan-suan-fa-hui-wen-chuan-yan-zh-8wmf/

思路二:使用双指针
代码实现

C++

class Solution {
public:
    bool isPalindrome(string s) {
        //输入: s = "A man, a plan, a canal: Panama" 输出:true
        //使用双指针

        if(s.length()<=1) return true;
        
        //左指针
        int left=0;
        //右指针
        int right=s.length()-1;
        
        //isalnum() 判断字符是否是字母或数字
        //tolower() 将字符转换成小写字母
        while(left<right){
            // 如果左指针指向的字符不是字母或数字,则左指针向右移动一位
            while(left < right && !isalnum(s[left])) left++;
            // 如果右指针指向的字符不是字母或数字,则右指针向左移动一位
            while(left < right && !isalnum(s[right])) right--;
            if(tolower(s[left])!=tolower(s[right])) return false;
            // 如果不存在上述情况,那么就是正常的在进行比较,即每次的字母或数字前后对应都一样,到最后left=right跳出循环,满足回文
            left++;
            right--;
        }
        return true;
    }
};
在这里插入代码片
运行结果

在这里插入图片描述

参考文章:

https://leetcode.cn/problems/valid-palindrome/solutions/1136949/zi-fu-chuan-suan-fa-hui-wen-chuan-yan-zh-8wmf/
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李莲花*

多谢多谢,来自一名大学生的感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值