每日两道算法题 - 判断回文(高频)

问题

给定一个字符串,判断该字符串是否为回文。只考虑字母和数字,忽略大小写。
回文:一个字符串无论正序读或倒序读都相同

思路

第一种:利用双指针(效率高)

通过双指针判断,被操作的字符是否为字母和数字,并且左右两边字符是否相等。

第二种:递归(效率低)

对第一种方式进行改造,通过递归方式实现。

第三种:正则(效率最差)

1)通过正则对原字符串进行过滤,只留下字母和数字并转换为小写,生成新的字符串。
2)将新生成的反转。
3)比较新旧两个字符串是否相等。

实现

第一种:双指针

class Solution {
    public boolean isPalindrome(String s) {
        int left = 0;
        int right = s.length()-1;
        while (left
image.png

第二种:递归

class Solution {
    public boolean isPalindrome(String s) {
        return isPalindromeHandler(s,0,s.length()-1);
    }
    public boolean isPalindromeHandler(String s,int left,int right){
        if(left>=right){
            return true;
        }
        while(left
image.png

第三种:正则实现

class Solution {
    public boolean isPalindrome(String s) {
        String newS = s.replaceAll("[^A-Za-z0-9]","").toLowerCase();
        String newRevS = new StringBuilder(newS).reverse().toString();
        return newS.equals(newRevS);
    }
}
image.png

你可能感兴趣的:(每日两道算法题 - 判断回文(高频))