验证回文串

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

说明:本题中,我们将空字符串定义为有效的回文串。
来源:https://leetcode-cn.com/problems/valid-palindrome/
方法一:利用双指针进行比较判断

public class HuiWenChuan {
    public static void main(String[] args) {
        String string = "race a car";
        HuiWenChuan test = new HuiWenChuan();
        test.isPlidString2(string);//判断是否为回文字符串
    }
    /**
     * 利用双指针,从而进行比较
     * @param s
     */
    public void isPlidString2(String s){
        StringBuilder sb = new StringBuilder();
        //遍历字符串,将字母或者数字字符添加到这个StringBuilder对象中
        for(int i = 0; i < s.length(); i++){
            Character ch = s.charAt(i);
            if(Character.isLetterOrDigit(ch)){
               /**
               *调用Character中的静态方法isLetterOrDigit,从而判断是否为
               *数字或者字母字符,如果直接添加ch的话,那么就会导致下面进行
               *比较的时候,要调用equalsIgnoreCase
               *sb.append(""+ch);
               */
                sb.append(Character.toLowerCase(ch));//将对应的字符转成小写之后,添加到StringBuilder 对象中
            }
        }
        //利用双指针,通过左右指针进行比较
        int left = 0;
        int right = sb.length() - 1;
        while(left < right){
            //通过比较前后两个字符是否相同
            if(sb.charAt(left) != sb.charAt(right)){
                System.out.println("不是回文串");
                return;
            }
            left++;
            right--;
        }
        System.out.println("是回文串");
    }
}

在这里插入图片描述

方法二:通过StringBuilder的reverse方法进行实现
1、由于只考虑字母和数字字符,因此遍历字符串,然后获取对应得字符,通过调用Character类中的静态方法isLetterOrDigit方法,从而判断当前的字符是否为数字或者字母,如果是,就将这个字符转成小写之后添加到StringBuilder中,之所以要转成小写,是因为题目得要求是忽略字母得大小写,因此此时将字母转成小写转换之后,之后直接调用equals方法进行比较,而不是调用equalsIgnoreCase方法进行比较
2、当将字符串中题目要求的字符拼接之后,StringBuilder对象调用toString方法,从而获取相应的字符串targer
3、StringBuilder对象调用reverse方法,之后再调用toString方法,从而返回target字符串的倒序
4、通过调用equals方法,如果返回true,说明是一个回文字符,否则不是。

值得注意的是,这里的2、3步骤是不可以调换的

给出的字符串是"race a car",判断是否为回文串,如果调换之后,就会发生这样的结果:
在这里插入图片描述
可以发现,调换之后,StringBuilder对象sb先执行reverse()方法,从而使得sb对应的字符串倒序

代码实现:

public class HuiWenChuan {
    public static void main(String[] args) {
        String string = "race a car";
        HuiWenChuan test = new HuiWenChuan();
        test.isPlidString(string);//判断是否为回文字符串
    }

    /**
     * 通过调用StringBuilder中的reverse方法,从而获取倒序,然后
     * 进行比较,判断是否相同
     * @param s
     */
    public void isPlidString(String s) {
        StringBuilder sb = new StringBuilder();
        //遍历字符串,将字母或者数字字符添加到这个StringBuilder对象中
        for(int i = 0; i < s.length(); i++){
            Character ch = s.charAt(i);
            if(Character.isLetterOrDigit(ch)){
                /**
                 *调用Character中的静态方法isLetterOrDigit,从而判断是否
                 *为数字或者字母字符如果直接添加ch的话,那么就会导致下面进
                 *行比较的时候,要调用equalsIgnoreCase
                 *sb.append(""+ch);
                */
                sb.append(Character.toLowerCase(ch));//将对应的字符转成小写之后,添加到StringBuilder对象中
            }
        }
        //调用相关的方法,从而将获取到sb对象的倒序字符串
        String target = sb.toString();
        /**
        *注意这一步先,否则如果和下面一步交换,那么就会改变原来的sb对应的字符串,即sb.toString()方法写在sb.reverse().toString()之前,否则,两者的顺序调换的时候,此时通过debug发现,调用sb.toString之后,得到的是倒序的字符,而不再是原来的字符串target
        */
        String reverseString = sb.reverse().toString();

        /*
        if(target.equalsIgnoreCase(reverseString))
            System.out.println("是回文串");
        else
            System.out.println("不是回文串");
        */
        if(target.equals(reverseString))
            System.out.println("是回文串");
        else
            System.out.println("不是回文串");
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值