力扣125:判断字符串是否是回文字符串

题目描述:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。
字母和数字都属于字母数字字符。
给定一个字符串s,如果它是回文串,返回true;否则,返回false。

  • s仅由可打印的ASCII字符组成
  • 1<=s.length<=2*100000
    在这里插入图片描述

题目分析:

  1. 引入双指针left,right,跳过非数字字母字符,其中left从前向后寻找第一个有效字符,right从后往前寻找第一个有效字符,若left!=right,找到反例,直接return false;
  2. left++,right–,继续上述流程,直至整个字符串遍历结束,left>=right,终止条件,说明此时没有反例,return true

代码实现:

 //判断回文串
    public static boolean  isPalindrome(String s)
    {
        //1.为了判断方便,直接将s转小写处理
        s=s.toLowerCase();
        //2.引入两个引用
        int left=0;
        int right=s.length()-1;
        //3.循环判断
        while(left<right)
        {
            //从左往右查找第一个有效数字字母字符
            while(left<right && !isVaildChar(s.charAt(left)))
            {
                //如果不是有效字符,则left++,进行跳过
                left++;
            }
            //从右向左查找第一个有效字符
            while(left<right && !isVaildChar(s.charAt(right)))
            {
                right--;
            }
            //是有效字符,进行比较
            if(s.charAt(left)!=s.charAt(right))
            {
                //找到反例
                return false;
            }
            //继续进行下一轮匹配
            left++;
            right--;
        }
        //循环结束,没有找到反例,则返回true
        return true;
    }
    public static boolean isVaildChar(char c)
    {
        if(c>='a' && c<='z')
        {
            return true;
        }
        if(c>='0' && c<='9')
        {
            return true;
        }
        return false;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值