验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
,
题意:
什么是回文? 比如说 a b c c b a 是回文串;a b c b 不是回文串
第一个示例
只考虑数字和字母,空字符也属于有效的回文,其他的符号就都不算
第一个示例可以看成是AmanaplanacanalPanama
不区分大小写,回文简单来说就是正这看,和倒着看是一样的
思路:
思想是有两个指针,一个指针放在字符串的第一个元素
另一个指针放在字符串的最后一个元素
然后移动两个指针,分别进行比较,看是否相等
然后题意说忽略大小写,那么我们可以把字母都转换成小写,或大写
A 的ASCII码值是65
a 的ASCII码值是97
他们相差32
那么大写转换成小写可以写成 A + 32 = a
我们就可以用这样的方式把大写的字母转换成小写的啦
这样就把有大写和小写的字母的字符串都转换成是小写的了
代码
class Solution {
public boolean isPalindrome(String s) {
for(int i = 0,j = s.length()-1; i < j ;){
char left = s.charAt(i);
char right = s.charAt(j);
if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
left += 32;//大写转小写 }
if(s.charAt(j) >= 'A' && s.charAt(j) <= 'Z'){
right += 32;
}
if(!(left >='a' && left <= 'z' || left >='0' && left <='9')){
i++;
continue;
}
if(!(right >='a' && right <= 'z' || right >='0' && right <='9')){
j--;
continue;
}
if( left != right) return false;
i++;
j--;
}
return true;
}
}