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
当对字符串进行修改的时候,需要使用StringBuffer和StringBuider类,
和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 文件的大小写映射信息将字符参数转换为小写。 |