题意
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
思路
自己开始想的是暴力解法,通过两层循环i,j,遍历出所有首尾字符相同的字串,但当字符串很长且某字符出现很多次时就会超时
参考别人的代码,是遍历一次各元素,每次以该元素为中心(考虑字串长度的奇偶性),分别向两边扩展,这样可以排除很多种字串的情况
代码
int count(string s, int left, int right) { int amount = 0; while(left >=0 && right<s.size()&& s[left--] == s[right++]){ amount++; } return amount; } int countSubstrings(string s) { int amount = 0; for(int i = 0; i<s.size(); i++){ amount += count(s, i, i); amount += count(s, i, i+1); } return amount; }