0
点赞
收藏
分享

微信扫一扫

647. 回文子串

文章目录

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;
    	}
    }
};
举报

相关推荐

0 条评论