题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
输入: “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
解题思路
解题思路:
- 双指针思路,首先遍历,将全部字符转为小写字母和数字
- 一个指针从前,一个指针从后,他俩相向移动,如果判断的元素不相同,则false
- 如果俩指针相遇,则true
/**
* Character.isLetter(ch) 判断ch是否为字母
*
* Character.isDigit(ch) 判断ch是否为数字
*
* Character.isLetterOrDigit(ch) 判断ch是否为字母或数字
*
* Character.toLowerCase()
* 将大写字母转化成小写字母
*
* Character.toUpperCase()
* 将小写字母转化成大写字母
*/
代码
public boolean isPalindrome(String s) {
StringBuffer stringBuffer = new StringBuffer();
//转小写字母和数字
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if(Character.isLetterOrDigit(ch)){//判断字符是否为字母数字
stringBuffer.append(Character.toLowerCase(ch));
}
}
//双指针
int left = 0, right = stringBuffer.length()-1;
for (int i = 0; i < stringBuffer.length(); i++) {
if(stringBuffer.charAt(left) != stringBuffer.charAt(right)){
return false;
}
left++;
right--;
}
return true;
}