【Leetcode刷题篇】leetcode647 回文子串
发布日期:2021-06-29 15:34:30
浏览次数:2
分类:技术文章
本文共 1001 字,大约阅读时间需要 3 分钟。
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:“abc” 输出:3 解释:三个回文子串: “a”, “b”, “c”
示例 2:
输入:“aaa” 输出:6 解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”
解题思路来自中心点:
比如对一个字符串 ababa,选择最中间的 a 作为中心点,往两边扩散,第一次扩散发现 left 指向的是 b,right 指向的也是 b,所以是回文串,继续扩散,同理 ababa 也是回文串。
这个是确定了一个中心点后的寻找的路径,然后我们只要寻找到所有的中心点,问题就解决了。
中心点一共有多少个呢?看起来像是和字符串长度相等,但你会发现,如果是这样,上面的例子永远也搜不到 abab,想象一下单个字符的哪个中心点扩展可以得到这个子串?似乎不可能。所以中心点不能只有单个字符构成,还要包括两个字符,比如上面这个子串 abab,就可以有中心点 ba 扩展一次得到,所以最终的中心点由 2 * len - 1 个,分别是 len 个单字符和 len - 1 个双字符。
如果上面看不太懂的话,还可以看看下面几个问题:
- 为什么有 2 * len - 1 个中心点? aba 有5个中心点,分别是 a、b、c、ab、ba abba 有7个中心点,分别是 a、b、b、a、ab、bb、ba
- 什么是中心点? 中心点即 left 指针和 right 指针初始化指向的地方,可能是一个也可能是两个
- 为什么不可能是三个或者更多? 因为 3 个可以由 1 个扩展一次得到,4 个可以由两个扩展一次得到 Java
class Solution { public int countSubstrings(String s) { // 中心点扩展 int res = 0; // 中心点遍历 for(int counter=0;counter<2*s.length()-1;counter++) { int left = counter/2; int right = left + counter%2; // 判断是否为回文串 while(left>=0&&right
转载地址:https://codingchaozhang.blog.csdn.net/article/details/110674007 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月19日 22时58分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Cause: couldn‘t make a guess for 解决方法
2019-04-29
小米手机相册选取后的intent为空?
2019-04-29
Android SurfaceView预览相机黑屏问题解决方案
2019-04-29
Android HTTP 设置UA(User-Agent)及自定义
2019-04-29
git和github的结合使用
2019-04-29
Android开发中常见错误与开发小技巧
2019-04-29
安卓学习笔记——文件存储读写
2019-04-29
【泛微ecology】做好系统备份及各项安全工作
2019-04-29
【泛微E9功能点】日志中心-项目日志
2019-04-29
【泛微E9功能点】日志中心-系统日志
2019-04-29
Oracle TIPS查数据库名 创建临时表空间 创建表空间 新增数据库文件 创建用户
2019-04-29
【泛微】ecology9附件不能为空判断
2019-04-29
【泛微ecology】从数据库导出人员信息,部门取机构全路径
2019-04-29
DB2数据库 截取日期 yyyy-mm-dd
2019-04-29
解决Office组件调用时未找到“AxImp.exe”问题
2019-04-29
Element中使用el-form-item内部el-input为textarea时由于自生成的.el-form-item__content导致无法设置textarea百分比宽度问题解决
2019-04-29
vue-cli3.0(@vue/cli)设置网站标题时找不到index.html问题解决
2019-04-29