文章目录
1.题目
- 题目要求
- eg:
Example 1:
Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".
Example 2:
Input: "aaa"
Output: 6
Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".
- 思路:递归思想
以字符串中的每一个字符都当作回文串中间的位置,然后向两边扩散,每当成功匹配两个左右两个字符,结果 res 自增1,然后再比较下一对。
注意回文字符串有奇数和偶数两种形式,如果是奇数长度,那么i位置就是中间那个字符的位置,所以左右两遍都从i开始遍历;如果是偶数长度的,那么i是最中间两个字符的左边那个,右边那个就是 i+1,这样就能 cover 所有的情况啦,而且都是不同的回文子字符串
2.代码
class Solution
{
public:
int countSubstrings(string s)
{
if (s.empty()) return 0;
int res=0;
for (int i=0;i<s.size();++i)
{
subcount(s,i,i,res);字符串长度为奇数
subcount(s,i,i+1,res);字符串长度为偶数
}
return res;
}
void subcount(string s,int i,int j, int& res)
{
while (s[i] == s[j] && i>=0 && j<s.size())
{
++i;
--j;
++res;
}
}
};