美文网首页数据结构与算法
剑指 Offer II 018 有效的回文

剑指 Offer II 018 有效的回文

作者: itbird01 | 来源:发表于2021-12-02 07:15 被阅读0次

    剑指 Offer II 018. 有效的回文

    题意:给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
    本题中,将空字符串定义为有效的 回文串

    解题思路

    解法1:遍历String,对于字符或数字,统一转换为小写字母,存储为字符串,然后通过字符串前后对比,判断是否为回文字符串
    解法2:两个指针,一个从前往后,一个从后往前,如果遍历到字符或者数字进行对比,如果相等,则继续,如果不等,则返回flase

    解题遇到的问题

    双指针的思想,要深入学习&应用!!!

    后续需要总结学习的知识点

    ##解法1
    class Solution {
        public boolean isPalindrome(String s) {
            if (s == null) {
                return false;
            }
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                if (Character.isLetterOrDigit(s.charAt(i))) {
                    builder.append(Character.toLowerCase(s.charAt(i)));
                }
            }
            String string2 = builder.substring(0, builder.length() / 2);
            String string1 = builder.reverse().substring(0, builder.length() / 2);
            return string1.equals(string2);
        }
    }
    
    ##解法2
    class Solution {
        public boolean isPalindrome(String s) {
            if (s == null) {
                return false;
            }
            int i = 0, j = s.length() - 1;
            while (i < j) {
                if (!Character.isLetterOrDigit(s.charAt(i))) {
                    i++;
                } else if (!Character.isLetterOrDigit(s.charAt(j))) {
                    j--;
                } else {
                    if (Character.toLowerCase(s.charAt(i)) != Character
                            .toLowerCase(s.charAt(j))) {
                        return false;
                    }
                    i++;
                    j--;
                }
            }
            return true;
        }
    }
    

    相关文章

      网友评论

        本文标题:剑指 Offer II 018 有效的回文

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