如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
示例 1:
输入: s = "A man, a plan, a canal: Panama" 输出:true 解释:"amanaplanacanalpanama" 是回文串。
示例 2:
输入:s = "race a car" 输出:false 解释:"raceacar" 不是回文串。
示例 3:
输入:s = " " 输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。 由于空字符串正着反着读都一样,所以是回文串。
提示:
1 <= s.length <= 2 * 105
s
仅由可打印的 ASCII 字符组成
题目给的描述很明确,将英文字符全部转换成小写形式,再保留所有的数字以及英文字母,因为字符串不能被修改,所以可以先将字符串全部转成数组再修改,因为字符串形式可以通过replace的方式一次性修改,把除了字母数字其他意外的字符全部修改成空格,最后再转换成字符串并用replace把所有空格替代,最后用while循环就能验证是否为回文串。
class Solution {
public boolean isPalindrome(String s) {
char a[] = s.toLowerCase().toCharArray();
for(int i = 0 ; i < a.length ; i++){
if(a[i] < 65 && a[i] > 57|| a[i] > 90 && a[i] < 97 || a[i] > 122 || a[i] < 48){
a[i] = ' ';
}
}
String t = String.valueOf(a).replaceAll(" ","");
if(t.length() == 1){
return true;
}
int left = 0 ,right = t.length() - 1;
while(left < right){
if(t.charAt(left) != t.charAt(right)){
return false;
}
left++;
right--;
}
return true;
}
}
还没学数据结构,解得也是很捞了。