【力扣】125. 验证回文串
问题描述
思路详情
本题目的重点是对java中字符串的各种API用法的掌握理解
- 1.首先只保留字母和数字
- 1.1可以使用正则表达式
- 1.2 Character.isLetterOrDight(ch) ,但是这个只能单个字符判断
- 2.将大写字母全部小写
- 3.验证是否为回文串
代码
通过正则表达式 ,可以直接筛选出所有的数字和大小写的字母,再将其转换为小写
至于回文,只需要比较一半较好了,并且奇偶长度回文的判断,和 整数取整后一样。
偶数,就正好是一半的比较
奇数,则对于回文数来说,中间的那个数也不参与比较。
class Solution {
public boolean isPalindrome(String s) {
/**
1.只保留字母和数字
1.1正则表达式
1.2
char ch=s.charAt(i);
if( Character.isLetterOrDight(ch)) 注意,这个是单个字符判断
sgood.append(Character.toLowerCase(ch));
2.全部变为小写
3.确保是回文
3.1 可以通过长度来判断
3.2 使用栈来判断
*/
String s1 = s.replaceAll("[^a-zA-Z0-9]", "");
String s2=s1.toLowerCase();
int len=s2.length();
for(int i=0;i<len/2;i++){
if(s2.charAt(i)!=s2.charAt(len-i-1))
return false;
}
return true;
}
}
这种写法则是用到了
- Character.isLetterOrDight(ch)
- StringBuffer().reverse
class Solution {
public boolean isPalindrome(String s) {
StringBuffer sgood = new StringBuffer();
int length = s.length();
for (int i = 0; i < length; i++) {
char ch = s.charAt(i);
if (Character.isLetterOrDigit(ch)) {
sgood.append(Character.toLowerCase(ch));
}
}
StringBuffer sgood_rev = new StringBuffer(sgood).reverse();
return sgood.toString().equals(sgood_rev.toString());
}
}