【LeetCode】647.回文子串

题目

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

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

示例 1:

复制代码
输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"

示例 2:

复制代码
输入:s = "aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示:

  • 1 <= s.length <= 1000
  • s 由小写英文字母组成

解答

源代码

java 复制代码
class Solution {
    public int countSubstrings(String s) {
        int res = 0;

        for (int i = 0; i < 2 * s.length() - 1; i++) {
            int left = i / 2, right = left + i % 2;

            while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
                res++;
            }
        }

        return res;
    }
}

总结

选取符合回文的字符作为子串中心向外扩展,子串分为两种------单数和双数,单数中心是一个字符,双数中心是两个字符。一个字符串(长度为n)有n个单字符,n-1个双字符,通过归纳得到左右字符索引,然后不断向两边扩展,不断更新结果。

相关推荐
_不会dp不改名_12 小时前
leetcode_3727 最大平方交替和
linux·算法·leetcode
共饮一杯无12 小时前
LiveKit本地录制落盘路径排查与修复实践
java·go·livekit
信奥卷王12 小时前
[GESP202509 六级] 货物运输(含视频)
算法
StevenLdh12 小时前
第八期 · 情绪闯关挑战盒:一个「无惩罚」成就系统的数据建模
java·微信小程序
Wang's Blog12 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务消费者
java·dubbo·交友
IT研究室13 小时前
最新计算机毕业设计选题推荐-基于spring boot的教育学习平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
余额瞒着我当琳13 小时前
C++算法学习篇5--二分查找法
c++·学习·算法
亚林瓜子13 小时前
Spring Boot 集成 ip2region 离线 IP 库实战指南
java·spring boot·后端·ip·ip2region
起个名字费劲死了13 小时前
基于灰度/形状的2D模板匹配
算法
杜 硕13 小时前
归并排序详解
数据结构·算法·排序算法