问题描述
思路详情
本题目的重点是对java中字符串的各种API用法的掌握理解
- 1.首先只保留字母和数字
- 1.1可以使用正则表达式
- 1.2 Character.isLetterOrDight(ch) ,但是这个只能单个字符判断
- 2.将大写字母全部小写
- 3.验证是否为回文串
代码
通过正则表达式 ,可以直接筛选出所有的数字和大小写的字母,再将其转换为小写
至于回文,只需要比较一半较好了,并且奇偶长度回文的判断,和 整数取整后一样。
偶数,就正好是一半的比较
奇数,则对于回文数来说,中间的那个数也不参与比较。
class Solution {public boolean isPalindrome(String s) {/**1.只保留字母和数字1.1正则表达式1.2char 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());}
}