方法1:
遍历字符串中的所有子串,并判断子串是否是回文子串。此方法效率较低,应想办法优化。
class Solution {
public int countSubstrings(String s) {
int ans=0;
int len = s.length();
if(len<2)return len;
for(int i=0; i<len-1; i++){
for(int j=i+1; j<len; j++){
if(ishuiwen(s.substring(i,j+1))){
ans++;
}
}
}
return ans+len;
}
public boolean ishuiwen(String s){
StringBuilder sb = new StringBuilder(s);
return s.equals(sb.reverse().toString());
}
}
方法2:
如果一个字符串是回文字符串,那么剔除掉头尾两个字符后,它依然是回文字符串。
根据这一思路,可以将待判断的字符串中的每个字符作为中间字符,向两边分别遍历,从而寻找更长的回文字符串。
应考虑字符串中字符数量为单数和双数两种情况。
class Solution {
int num=0;
public int countSubstrings(String s) {
for(int i=0; i<s.length(); i++){
helper(s, i, i);
helper(s, i, i+1);
}
return num;
}
public void helper(String s, int start, int end){
while(start>=0 && end <s.length() && s.charAt(start) == s.charAt(end)){
num++;
start--;
end++;
}
}
}