125、验证回文字符串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
题解
1、过滤 判断
class Solution {
public boolean isPalindrome(String s) {
if (s.length() <= 1) {
return true;
}
s = s.toLowerCase();
StringBuilder sb = new StringBuilder();
for (char ch : s.toCharArray()) {
if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')){
sb.append(ch);
}
}
s = sb.toString();
int l = 0,r = s.length()-1;
// System.out.println(s);
while(l <= r){
char c1 = s.charAt(l);
char c2 = s.charAt(r);
if (c1 != c2) {
return false;
}
l++;
r--;
}
return true;
}
}
2、利用API
public boolean isPalindrome(String s) {
String str = s.toLowerCase();
StringBuilder sb = new StringBuilder();
for(char c : str.toCharArray()){
if(Character.isLetterOrDigit(c)) sb.append(c);
}
return sb.toString().equals(sb.reverse().toString());
}
// 链接:https://leetcode-cn.com/problems/valid-palindrome/solution/java-da-dao-zhi-jian-6xing-by-rabbitzhao/
3、双指针
class Solution {
public boolean isPalindrome(String s) {
if (s.length() == 0)
return true;
String low = s.toLowerCase();
int i = 0;
int j = low.length() - 1;
while (i < j)
{
if (!Character.isLetterOrDigit(low.charAt(i)))
{
i++;
continue;
}
if (!Character.isLetterOrDigit(low.charAt(j)))
{
j--;
continue;
}
if (low.charAt(i) != low.charAt(j))
return false;
else
{
i++;
j--;
}
}
return true;
}
}
// 作者:starlikemoon
// 链接:https://leetcode-cn.com/problems/valid-palindrome/solution/javashuang-zhi-zhen-by-starlikemoon/
680、验证回文字符串II
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
class Solution {
public boolean validPalindrome(String s) {
int low = 0, high = s.length() - 1;
while (low < high) {
char c1 = s.charAt(low), c2 = s.charAt(high);
if (c1 == c2) {
low++;
high--;
} else {
boolean flag1 = true, flag2 = true;
for (int i = low, j = high - 1; i < j; i++, j--) {
char c3 = s.charAt(i), c4 = s.charAt(j);
if (c3 != c4) {
flag1 = false;
break;
}
}
for (int i = low + 1, j = high; i < j; i++, j--) {
char c3 = s.charAt(i), c4 = s.charAt(j);
if (c3 != c4) {
flag2 = false;
break;
}
}
return flag1 || flag2;
}
}
return true;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com