题意

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

示例 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;
      }