力扣:125验证回文串

125验证回文串

125. 验证回文串

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

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

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false

解法一:遍历StringBuilder修改值,最后判断是否回文

在这里插入图片描述

public boolean isPalindrome(String s) {
    StringBuilder str=new StringBuilder(s);
    s="";
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)>=65 && str.charAt(i)<=90)
        {
            char c=(char) (str.charAt(i) + 32);;
            str.setCharAt(i, c);
        }else if(str.charAt(i)>=97 && str.charAt(i)<=122 ||(str.charAt(i)>=48 && str.charAt(i)<=57)){
            continue;
        }else
        {
            str.deleteCharAt(i);
            i--;
        }
    }
    String s1=str.toString();
    String s2=str.reverse().toString();
    System.out.println(s1);
    System.out.println(s2);
    return s1.equals(s2);
    }

解法二:双指针

在这里插入图片描述

这段代码的思路是先将字符串中的大写字母转换为小写字母,然后移除所有非字母数字字符。
然后通过双指针法,从字符串的两端中间遍历,比较对应位置的字符是否相等
如果所有对应位置的字符都相等,则说明字符串是回文串,返回true;否则返回false

public boolean isPalindrome(String s) {

    int i=0,j=s.length()-1;
    char c1=' ',c2=' ';
    while(i<j)
    {
        boolean f1=true,f2=true;
        //i
        if(s.charAt(i)>=65 && s.charAt(i)<=90)
        {
            //大写要转小写
            c1=(char)((int)s.charAt(i)+32);
        }else if(s.charAt(i)>=97 && s.charAt(i)<=122 ||(s.charAt(i)>=48 && s.charAt(i)<=57)){
            //正常字符与数字
            c1=s.charAt(i);
        }else
        {
            //其他字符舍去,不做比较
            f1=false;
            i++;
        }

        //j
        if(s.charAt(j)>=65 && s.charAt(j)<=90)
        {
            //大写要转小写
            c2=(char)((int)s.charAt(j)+32);
        }else if(s.charAt(j)>=97 && s.charAt(j)<=122 ||(s.charAt(j)>=48 && s.charAt(j)<=57)){
            //正常字符与数字
            c2=s.charAt(j);
        }else
        {
            //其他字符舍去,不做比较
            f2=false;
            j--;
        }
        //判断什么时候能比较
        if(f1 && f2)
        {
            if(c1==c2)
            {
                //i与j要成功过才能++
                i++;
                j--;
            }else{
                return false;
            }
        }
    }
    return true;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值