【Leetcode刷题篇】(十五)验证回文串

题目:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

链接:https://leetcode-cn.com/problems/valid-palindrome

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:

输入: "race a car"
输出: false

方法一:

分析:碰撞指针法

两个指针,分别指向首尾,进行比较。

        要注意的是一个为大写字母一个为小写字母的情况。例如'P'和'p',判断的方法是相差等于32或-32,但要注意,数字0和大写'P'之间的差值也为32。因此此类判断应该限定其值大于等于'A'。

代码:

class Solution {
public:
    bool isPalindrome(string s) {
        if (s.size() ==0)
            return true;
        
        int i= 0,j = s.size()-1;
        
        while(i<j)
        {
            
            if(((s[i]>='a')&&(s[i]<='z')||(s[i]>='A')&&(s[i]<='Z')||(s[i]>='0')&&(s[i]<='9'))&&((s[j]>='a')&&(s[j]<='z') ||(s[j]>='A')&&(s[j]<='Z') ||(s[j]>='0')&&(s[j]<='9'))){
                
            if((s[i] == s[j]) || (s[i]>='A'&&s[j]>='A')&&((s[i] - s[j] == 32) || (s[i] - s[j] == -32))){
              ++i;
              --j;       
        }
         else
             break;
       }
        if(!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||s[i]>='0'&&s[i]<='9'))
                ++i;
        if(!(s[j]>='a'&&s[j]<='z'||s[j]>='A'&&s[j]<='Z'||s[j]>='0'&&s[j]<='9'))
                --j;    
      }  
      if(i<j)
            return false;
      else
            return true;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值