算法编程(六):验证回文串

120 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

写在前面

今天我们来看的这道题,依然是简单系列的《验证回文串》,我们会通过这道题,学习一下回文串是什么,以及如何精准判断字母在char类型中的体现。

image.png

题目解读

从题目的标题就知道这道题最终想要的结果是什么样的。

题目的描述中也没有具体给出回文串的定义,如果你刷过其他回文串的题目,一定就能有所了解了。

这里大概说一下,回文串是一种特殊的字符串,这种字符串可以首尾对称,简单的就是这么一个特征。

但是在这道题里面,并不是给你一个规则的字符串,而是一个短句,这其中包含着多个特殊字符,所以要验证这个字符串是否是回文串,还必须将这些特殊字符过滤掉。

这个时候就是要通过Character.isLetterOrDigit方法来判断某个字符是否是字母了。

有了这些理解,就可以去解题了。

代码实现

这是我运行的代码,使用的就是先处理特殊字符以及空格,再判断是否是回文串问题。

class Solution {
    public boolean isPalindrome(String s) {
        s = s.toLowerCase();
        List<Character> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            if(Character.isLetterOrDigit(s.charAt(i))){
                list.add(s.charAt(i));
            }
        }
        if(list.size() == 0){
            return true;
        }
        int l = 0, r = list.size() - 1;
        while (l < r){
            char lc = list.get(l);
            char rc = list.get(r);
            if(lc != rc){
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}

执行结果:

执行结果一般吧,前两次提交失败,是因为不想单独处理特殊字符造成的问题,结果还是没能突破,大家可以给一下思路出来。

image.png

其他思路

其他思路,也是从大佬的题解中看到的,直接通过一半字符串的反转判断一下,可谓是一绝,就是没有试运行效率怎么样。

总结

今天的这道题,主要是考察回文串的概念,以及字母在char类型时如何进行精准判断,只要掌握了这两样,很难回答不上来。