647.回文子串
题目:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1: 输入: “abc” 输出: 3
解释: 三个回文子串: “a”, “b”, “c”.
示例 2: 输入: “aaa” 输出: 6
说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.
从开始每个字符进行判断,回文串字符个数可能为奇数或偶数
思路:中心扩散
如果是奇数,则中心字符为当前字符,然后向两边扩散
如果是偶数,则中心字符为当前字符和下一个字符,然后向两边扩散
class Solution {
public:
int countSubstrings(string s)
{
if(s.empty()) return 0;
int size = s.size();
int res = 0;
for(int i = 0; i<s.size(); i++)
{
Find(s, i, i, res);
Find(s, i, i+1, res);
}
return res;
}
void Find(string &s,int i , int j, int &res)
{
while(i>=0 && j<s.size() && s[i] == s[j])
{
--i;
++j;
++res;
}
}
};