125. 验证回文串

题目:

125. 验证回文串
在这里插入图片描述

题解:

在这里插入图片描述
在这里插入图片描述

1. 题解一:正则表达式

我们还可以使用正则匹配,把特殊字符过滤掉,只留下字母和数字,然后转化为小写,再反转,最后在判断是否相等。当然这种写法只是提供了一种思路,面试中如果写出这种肯定还会让你再写一种的,因为它没有完全考察出对这题的解题思路。

2. 题解二:双指针中的左右指针

最简单的就是使用双指针,一个指向前,一个指向后,遇到空格以及特殊字符要跳过,然后判断。
在这里插入图片描述
在这里插入图片描述

代码:

1. 代码一:正则表达式

// 方法1: 正则表达式
public static boolean isPalindrome(String s) {
    String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
    String rev = new StringBuilder(actual).reverse().toString();
    return actual.equals(rev);
}

2. 代码二:双指针中的左右指针


public class code125 {

    // 方法2: 双指针中的左右指针
    public static boolean isPalindrome(String s) {
        if(s.isEmpty())
        {
            return true;
        }
        // 从头到尾一一比较即可,遇到除字母和数字字符的字符跳过
        int left = 0;
        int right = s.length() - 1;
        while(left < right)
        {
            while(left < right && !Character.isLetterOrDigit(s.charAt(left)))
            {
                left++;
            }
            while(left < right && !Character.isLetterOrDigit(s.charAt(right)))
            {
                right--;
            }
            if(Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right)))
            {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

    public static void main(String[] args) {
        String s1 = "A man, a plan, a canal: Panama";
        boolean res1 = isPalindrome(s1);
        System.out.println(res1);

        String s2 = "race a car";
        boolean res2 = isPalindrome(s2);
        System.out.println(res2);
    }
}

参考:

  1. 验证回文串
  2. java的4种解题方式
  3. [Java] 大道至简 6行
  4. JAVA双指针
  5. 验证回文串(双指针法)
  6. 正则或者双指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dev_zyx

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值