数据结构与算法

剑指 Offer II 018 有效的回文

2021-12-02  本文已影响0人  itbird01

剑指 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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读