LeetCode 647. 回文子串(DP/中心扩展)
文章目录
- 1. 题目
- 2. 解题
- 2.1 动态规划
- 2.2 中心扩展法
1. 题目
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".注意:
输入的字符串长度不会超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindromic-substrings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 参考:
LeetCode 5. 最长回文子串(动态规划)
LeetCode 516. 最长回文子序列(动态规划)
2.1 动态规划
- 先计算长度为1,2的子串,然后按长度动态规划
class Solution {public:int countSubstrings(string s) {if(s.size() <= 1)return s.size();int i, j, len, n = s.size(), count = s.size();vector<vector<bool>> dp(n,vector<bool>(n,0));for(i = 0; i < n; ++i){dp[i][i] = true;if(i < n-1 && s[i]==s[i+1]){dp[i][i+1] = true;count++;}}for(len = 1; len < n; ++len){for(i = 0; i < n-len; ++i){if(dp[i][i+len-1] && i-1>=0 && s[i-1]==s[i+len])//是回文串{dp[i-1][i+len] = true;count++;}}}return count;}
};
124 ms 7.8 MB
2.2 中心扩展法
class Solution {public:int countSubstrings(string s) {if(s.size() <= 1)return s.size();int i, count = 0;for(i = 0; i < s.size(); ++i){centerspand(s,i,i,count);centerspand(s,i,i+1,count);}return count;}void centerspand(string& s, int l, int r, int& count){while(l>=0 && r<s.size() && s[l]==s[r]){count++;l--;r++;}}
};
4 ms 6.3 MB
LeetCode 647. 回文子串(DP/中心扩展)相关推荐
- 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)
最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...
- leetcode - 647. 回文子串
647. 回文子串 ------------------------------------------ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串.具有不同开始位置或结束位置的子串, ...
- 《leetcode : 647. 回文子串 思考分析双指针解法》
647. 回文子串 如何确定是回文串: 找中心然后往两边扩散,判断是否对称即可. 在遍历中心点的时候,注意中心点可以是一个元素也可以是两个元素. class Solution {public:int ...
- LeetCode 647. 回文子串 (动态规划)
647. 回文子串 题意: 任意给定一个字符串,计算这个字符串的回文子串个数 解法1(暴力法) 思路: 默认回文子串初始个数为字符串长度 从子串长度为2-母串长度:找出所有的子串startIndex和 ...
- Java实现 LeetCode 647 回文子串(暴力)
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...
- [Leetcode][第647题][JAVA][回文子串][动态规划][中心扩展][Manacher 算法]
[问题描述][中等] [解答思路] 1. 暴力 首先明确如何判断一个字符串是否为回文字符串.第一个字符与最后一个字符相同,第二个字符与倒数第二个字符相同-关于中心位置轴对称. 本题要求一共有多少个回文 ...
- 122. Leetcode 647. 回文子串 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串 步骤二.推断状态方程: 在确定递推公式时,就要分析如下几种情况. 整体上是两种,就是s[ ...
- LeetCode 647 回文子串
题目链接:力扣 思路:动态规划 dp[i][j]表示s下标[i:j]的子串是否是回文串,问题转化为只要遍历dp数组,统计true的个数 确定边界情况: ●当i=j时,dp[i][i]表示s下标i到i的 ...
- Leetcode 647.回文子串
Time: 20190905 Type: Medium 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不 ...
最新文章
- IEA:截止2015年全球太阳能光伏装机累计超228GW
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
- mysql每个类型查三条_Mysql的几个灵魂拷问(三)
- python折线图怎么添加数值_Python数据可视化:如何创建曲线图
- html canvas blob image 污染源
- 数据库基础知识——参考数据库基本概念6版
- 告别遥控器,BBC 试验用大脑调台
- 【特纳斯电子】keil uvision5 MDK RM v5.29 (附注册机+视频安装教程)
- 不上班的活法,在家赚钱的副业兼职
- 服务器上传图片不显示,网站后台上传图片失败或不显示的原因
- 定时器0练习,利用左循环函数_crol_(a,b)
- 关于 EOF EOF; 是什么意思?
- sd卡 格式化 命令 linux,在Linux命令行上格式化SD卡、USB驱动器、闪存驱动器的方法...
- 网上流传“魔方文化启示录”
- 阿里云的ECS和AWS的EC2比较
- 【Python从入门到精通】二、核心编程:5.正则表达式
- 微信小程序实现微信支付
- 小强升职记思维导图_《小强升职记》思维导图与总结
- Oracle表连接优化思路
- Android开发之——卸载系统应用
热门文章
- jq分页 不刷新页面_jQuery无刷新分页完整实例代码
- 第一季2:视频设备开发的技术流
- platform驱动开发套路、DM9000的一些分析
- C++远征之封装篇——对象数组,对象成员
- 【Mysql】之视图操作
- asp.net core 拦击器制作的权限管理系统DEMO
- Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法
- 命令行运行jmeter脚本
- linux内核启动以及文件系统的加载过程
- [Leetcode]@python 107. Binary Tree Level Order Traversal II