首页 > 试题广场 >

回文子串数量

[编程题]回文子串数量
  • 热度指数:230 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串,返回这个字符串中有多少个回文子串。
两个相同的回文子串出现在不同的位置,认为是2个回文子串。
a、aa、aaa、aba、aabaa、abcba均认为是回文子串。
示例1

输入

"aaa"

输出

6

说明

a、a、a、aa、aa、aaa
示例2

输入

"abcb"

输出

5

说明

a、b、c、b、bcb

中心扩展算法

import java.util.*;


public class Solution {
  /**
   * 
   * @param str string字符串 
   * @return int整型
   */
  public int palindromeCount (String str) {
    int ans = 0;
    for (int center = 0; center < str.length(); center++) {
      ans += expand(str, center, center) + expand(str, center, center + 1);
    }
    return ans;
  }

  private int expand(String str, int left, int right) {
    int ans = 0;
    while (left >= 0 && right < str.length() && str.charAt(left) == str.charAt(right)) {
      ans++;
      left--;
      right++;
    }
    return ans;
  }
}
发表于 2022-03-30 00:00:51 回复(0)