125. 验证回文串

难度:简单
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
 
说明:本题中,我们将空字符串定义为有效的回文串。
 
示例 1:
 
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
 
输入: "race a car"
输出: false
 
 
解题思路:
方法一:
①对字符串s进行一次遍历循环,将字母和数字进行保留
②将数字和字母(小写)存到一个字符串sgood中
③再将sgood翻转得到sgood_reverse
④返回两个字符串比较的布尔值
 
 
代码
class Solution {
    public boolean isPalindrome(String s) {
        int length = s.length();
        StringBuffer sgood = new StringBuffer();
        for(int i = 0; i < length; i++){
            char ch = s.charAt(i);
            if(Character.isLetterOrDigit(ch)){
                sgood.append(Character.toLowerCase(ch));
            }
        }
        StringBuffer sgood_reverse = new StringBuffer(sgood).reverse();
        boolean isPalin = sgood.toString().equals(sgood_reverse.toString());
        return  isPalin;
    }
}
 
补充知识:
一、StringBuffer
当对字符串进行修改的时候,需要使用StringBufferStringBuider类,
和String类不同的是,StringBuffer和StringBulider类的对象能够被多次的修改,并且不产生新的未使用对象,
StringBuilder 相较于StringBuffer类有速度优势,所以在多数情况下建议使用StringBuider类,
然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
StringBuffer 方法
序号 方法描述
1 public StringBuffer append(String s)
将指定的字符串追加到此字符序列
2 public StringBuffer reverse()
将此字符序列用起翻转形式取代
3 public delete(int start, int end)
移除此序列的子字符串中的字符
4 public insert(int offset, int i)
将int参数的字符串表示形式插入此序列中
5 replace(int start, int end,String str)
使用给定String中的字符替换此序列的子字符串中的字符
此题中用到的String类方法
序号 方法描述
1 int length()
返回长度(字符数)。
2 char charAt(int index)
返回此序列中指定索引处的char值
3 String toString()
返回此序列这种数据的字符串表示形式
4 public boolean equals(Object anObject)
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。 
此题中用到的Character类方法
序号 方法描述
1 public static boolean isLetterOrDigit(char ch)
确定指定字符是否为字母或数字。 
如果 Character.isLetter(char ch) 或 Character.isDigit(char ch) 对字符返回的是 true,则认为字符是一个字母或数字。 
2 public static char toLowerCase(char ch)
使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。 
 

题目内容取自:https://leetcode-cn.com/problems/valid-palindrome/

posted @ 2020-06-19 10:46  FenixG  阅读(125)  评论(0编辑  收藏  举报