持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
写在前面
今天我们来看的这道题,依然是简单系列的《验证回文串》,我们会通过这道题,学习一下回文串是什么,以及如何精准判断字母在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类型时如何进行精准判断,只要掌握了这两样,很难回答不上来。