给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc" 输出: 3 解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa" 输出: 6 说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
- 输入的字符串长度不会超过1000。
解题思路:字符串有多少个回文字符子串
方法一、遍历字符串的子串判断是否为回文
class Solution {
public:
int countSubstrings(string s) {
int count=0;
int len=s.size(),i,j=0;
while(j<s.size()){
for(i=1;i<=s.size()-j;i++){
if(judge(s.substr(j,i)))count++;
}
j++;
}
return count;
}
bool judge(string s){
if(s.size()==1)return true;
for(int i=1;i<=s.size()/2;i++){
if(s[i-1]!=s[s.size()-i])return false;
}
return true;
}
};
方法二、遍历字符串每个字符,判断两侧是否相同。两种情况,左右字符和字符的左右两侧对称(例abba和abcba)
class Solution {
public:
int countSubstrings(string s) {
int count=0;
for(int i=0;i<s.size();i++){
for(int j=0;i-j>=0 &&i+j<s.size() &&s[i-j]==s[i+j];j++)count++;
for(int j=0;i-1-j>=0 &&i+j<s.size() &&s[i-1-j]==s[i+j];j++)count++;
}
return count;
}
};