写在前面
今天我们来看的这道题,依然是简单系列的《验证回文串》,我们会通过这道题,学习一下回文串是什么,以及如何精准判断字母在char类型中的体现。
题目解读
从题目的标题就知道这道题最终想要的结果是什么样的。
题目的描述中也没有具体给出回文串的定义,如果你刷过其他回文串的题目,一定就能有所了解了。
这里大概说一下,回文串是一种特殊的字符串,这种字符串可以首尾对称,简单的就是这么一个特征。
但是在这道题里面,并不是给你一个规则的字符串,而是一个短句,这其中包含着多个特殊字符,所以要验证这个字符串是否是回文串,还必须将这些特殊字符过滤掉。
这个时候就是要通过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; } }
执行结果:
执行结果一般吧,前两次提交失败,是因为不想单独处理特殊字符造成的问题,结果还是没能突破,大家可以给一下思路出来。
其他思路
其他思路,也是从大佬的题解中看到的,直接通过一半字符串的反转判断一下,可谓是一绝,就是没有试运行效率怎么样。
总结
今天的这道题,主要是考察回文串的概念,以及字母在char类型时如何进行精准判断,只要掌握了这两样,很难回答不上来。