栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题20:回文子字符串的个数(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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号