版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35508033/article/details/88929925
验证回文串
https://leetcode-cn.com/problems/valid-palindrome/
如“A man, a plan, a canal: Panama”就是一个回文,从头读和从尾往前读读出来是一样的
采用二分法,一个指针从左边遍历,一个从右边遍历,跳过非字母和非数字,当遍历到中点依然相同那就是回文
class Solution {
public boolean isPalindrome(String s) {
int i=0,j=s.length()-1;
while(i<j){
if(!isAlpha(s.charAt(i))){
i++;
continue;
}
if(!isAlpha(s.charAt(j))){
j--;
continue;
}
if(Character.toLowerCase(s.charAt(i))==Character.toLowerCase(s.charAt(j))){
i++;
j--;
continue;
}
return false;
}
return true;
}
private boolean isAlpha(char c){
if(c>='0'&&c<='9'||c>='a'&&c<='z'||c>='A'&&c<='Z'){
return true;
}
return false;
}
}
验证回文字符串Ⅱ
https://leetcode-cn.com/problems/valid-palindrome-ii/
使用双指针,一个指向头,一个指向尾,如果两者不相同了,则可以将尾部的往前挪一个,或者首部的往后挪一个,判断这两种情况
这两种已经相当于删除了一个字符,如果不是回文字符串,说明删除一个字符满足不了要求
class Solution {
public boolean validPalindrome(String s) {
int i=-1,j=s.length();
while(++i<--j){
if(s.charAt(i)!=s.charAt(j)){
return isPalindrome(s,i+1,j)||isPalindrome(s,i,j-1);
}
}
return true;
}
private boolean isPalindrome(String s,int i,int j){
while(i<j){
if(s.charAt(i++)!=s.charAt(j--)){
return false;
}
}
return true;
}
}