剑指 Offer II 018. 有效的回文
题意:给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
本题中,将空字符串定义为有效的 回文串
解题思路
解法1:遍历String,对于字符或数字,统一转换为小写字母,存储为字符串,然后通过字符串前后对比,判断是否为回文字符串
解法2:两个指针,一个从前往后,一个从后往前,如果遍历到字符或者数字进行对比,如果相等,则继续,如果不等,则返回flase
解题遇到的问题
双指针的思想,要深入学习&应用!!!
后续需要总结学习的知识点
无
##解法1
class Solution {
public boolean isPalindrome(String s) {
if (s == null) {
return false;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isLetterOrDigit(s.charAt(i))) {
builder.append(Character.toLowerCase(s.charAt(i)));
}
}
String string2 = builder.substring(0, builder.length() / 2);
String string1 = builder.reverse().substring(0, builder.length() / 2);
return string1.equals(string2);
}
}
##解法2
class Solution {
public boolean isPalindrome(String s) {
if (s == null) {
return false;
}
int i = 0, j = s.length() - 1;
while (i < j) {
if (!Character.isLetterOrDigit(s.charAt(i))) {
i++;
} else if (!Character.isLetterOrDigit(s.charAt(j))) {
j--;
} else {
if (Character.toLowerCase(s.charAt(i)) != Character
.toLowerCase(s.charAt(j))) {
return false;
}
i++;
j--;
}
}
return true;
}
}
网友评论