解题思路:参考了一下别人的解答,难点在于当遇到不同字符时,应该删除哪个,应该两种情况都考虑一下,可以再写一个函数,专门判断删除后的后续字符回文情况。
class Solution {
public boolean validPalindrome(String s) {
int left=0,right=s.length()-1;
while(left<right) {
if(s.charAt(left)==s.charAt(right)) {
left++;
right--;
}
//遇到不同字符时,不知道删除哪个字符,两个都需要尝试
//不相等对两种情况进行尝试,左边字符向右移动一位或者右边字符向左移动一位,然后再判断剩余字符情况
else return judge(s,left+1,right)||judge(s,left,right-1);
}
return true;
}
public boolean judge(String s,int left,int right) {
while(left<right) {
if(s.charAt(left)!=s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
020-回文子字符串的个数
解题思路:终于自己独立做出来啦,写两个函数,一个是判断是否为回文数的函数judge(),另外一个函数包括两个指针left和right,每次left指针移动一位,right指针从left+1到s.length()-1区间内变化,然后调用判断函数,判断区间内子串情况,是的话+1。用时稍微有点长。
class Solution {
public int countSubstrings(String s) {
int l=s.length();
int left=0,right=0;
int count=0;
for(left=0;left<l;left++) {
right=left+1;
while(right<l+1) {
String str=s.substring(left,right);
if(judge(str)==true) {
count++;
}
right++;
}
}
return count;
}
public boolean judge(String s) {
int i=0,j=s.length()-1;
while(i<j) {
if(s.charAt(i)!=s.charAt(j)) {
return false;
}
i++;
j--;
}
return true;
}
}