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

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

作者: 辉_ace | 来源:发表于2021-12-19 22:20 被阅读0次

    问题

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

    思路

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

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

    第二种:递归(效率低)

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

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

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

    实现

    第一种:双指针

    class Solution {
        public boolean isPalindrome(String s) {
            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;
        }
    }
    
    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<right && !Character.isLetterOrDigit(s.charAt(left))){
                left++;
            }
            while(left<right && !Character.isLetterOrDigit(s.charAt(right))){
                right--;
            }
            return Character.toLowerCase(s.charAt(left)) == Character.toLowerCase(s.charAt(right)) && isPalindromeHandler(s,++left,--right);
        }
    }
    
    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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/jutafrtx.html