当前位置:   article > 正文

面试题20:回文子字符串的个数(Java版)_java 回文字符串的数量

java 回文字符串的数量

题目:给定一个字符串,请问该字符串中有多少个回文连续子 字符串?例如,字符串"abc"有3个回文子字符串,分别 为"a"、“b"和"c”;而字符串"aaa"有6个回文子字符串,分别为"a"、“a”、“a”、“aa”、“aa"和"aaa”。

题目分析

通过双指针法从中间分别向两边同时移动,因为字符串长度可能为奇数也可能为偶数,为奇数时中心点只有一个,而为偶数时中心点则有两个所以当字符串长度为奇数时两个指针的起点都在哪一个中心点上而为偶数时则分别在两个中心点上。

具体实现

public int countSubstrings(String s) {
   if (s == null || s.length() == 0) {
       return 0;
   }

   int count = 0;
   for (int i = 0; i < s.length(); i++) {
       // 字符串长度为奇数的情况
       count += countPalindrome(s, i, i);
       // 字符串长度为偶数的情况
       count += countPalindrome(s, i, i + 1);
   }

   return count;
}

// 记录从中心点分别向两边移动指针的过程中的回文个数
public int countPalindrome(String s, int start, int end) {
    int count = 0;
    // 当两个指针没有越界,并且两个指针指向的字符相同时进入循环
    while (start >= 0 && end < s.length()
            && s.charAt(start) == s.charAt(end)) {
        count++;
        start--;
        end++;
    }
    return count;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/799566
推荐阅读
相关标签
  

闽ICP备14008679号