Leetcode 每日一题 125.验证回文串
问题定义
给定一个字符串s
,我们需要判断它是否是一个回文串。但在此之前,我们需要将所有大写字符转换为小写字符,并移除所有非字母数字字符。只有经过这样处理后的字符串,我们才进行回文检测。
示例解析
以下是几个示例,帮助我们更好地理解这个问题:
-
输入:
s = "A man, a plan, a canal: Panama"
输出:true
解释:移除非字母数字字符并转换为小写后,得到"amanaplanacanalpanama",这是一个回文串。 -
输入:
s = "race a car"
输出:false
解释:处理后得到"raceacar",这不是一个回文串。 -
输入:
s = " "
输出:true
解释:移除非字母数字字符后,得到空字符串"",空字符串被认为是回文串。
Java实现
在Java中,我们可以通过以下步骤实现回文串的检测:
- 将输入字符串转换为小写。
- 构建一个新的字符串,只包含字母和数字字符。
- 比较新字符串与其反转是否相等。
以下是具体的Java代码实现:
java
class Solution {
public boolean isPalindrome(String s) {
// 将字符串转换为小写
s = s.toLowerCase();
// 构建新的字符串,只包含字母和数字
StringBuilder filtered = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isLetterOrDigit(c)) {
filtered.append(c);
}
}
// 将过滤后的字符串与它的反转进行比较
return filtered.toString().equals(new StringBuilder(filtered).reverse().toString());
}
}
代码解析
s.toLowerCase()
:将输入字符串转换为小写,以忽略大小写的差异。StringBuilder filtered
:用于构建只包含字母和数字的新字符串。Character.isLetterOrDigit(c)
:检查字符c
是否为字母或数字,如果是,则添加到filtered
中。new StringBuilder(filtered).reverse().toString()
:获取filtered
的反转字符串,并与原字符串进行比较。