文章目录

  • 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/中心扩展)相关推荐

  1. 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)

    最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...

  2. leetcode - 647. 回文子串

    647. 回文子串 ------------------------------------------ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串.具有不同开始位置或结束位置的子串, ...

  3. 《leetcode : 647. 回文子串 思考分析双指针解法》

    647. 回文子串 如何确定是回文串: 找中心然后往两边扩散,判断是否对称即可. 在遍历中心点的时候,注意中心点可以是一个元素也可以是两个元素. class Solution {public:int ...

  4. LeetCode 647. 回文子串 (动态规划)

    647. 回文子串 题意: 任意给定一个字符串,计算这个字符串的回文子串个数 解法1(暴力法) 思路: 默认回文子串初始个数为字符串长度 从子串长度为2-母串长度:找出所有的子串startIndex和 ...

  5. Java实现 LeetCode 647 回文子串(暴力)

    647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...

  6. [Leetcode][第647题][JAVA][回文子串][动态规划][中心扩展][Manacher 算法]

    [问题描述][中等] [解答思路] 1. 暴力 首先明确如何判断一个字符串是否为回文字符串.第一个字符与最后一个字符相同,第二个字符与倒数第二个字符相同-关于中心位置轴对称. 本题要求一共有多少个回文 ...

  7. 122. Leetcode 647. 回文子串 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串 步骤二.推断状态方程: 在确定递推公式时,就要分析如下几种情况. 整体上是两种,就是s[ ...

  8. LeetCode 647 回文子串

    题目链接:力扣 思路:动态规划 dp[i][j]表示s下标[i:j]的子串是否是回文串,问题转化为只要遍历dp数组,统计true的个数 确定边界情况: ●当i=j时,dp[i][i]表示s下标i到i的 ...

  9. Leetcode 647.回文子串

    Time: 20190905 Type: Medium 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不 ...

最新文章

  1. IEA:截止2015年全球太阳能光伏装机累计超228GW
  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
  3. mysql每个类型查三条_Mysql的几个灵魂拷问(三)
  4. python折线图怎么添加数值_Python数据可视化:如何创建曲线图
  5. html canvas blob image 污染源
  6. 数据库基础知识——参考数据库基本概念6版
  7. 告别遥控器,BBC 试验用大脑调台
  8. 【特纳斯电子】keil uvision5 MDK RM v5.29 (附注册机+视频安装教程)
  9. 不上班的活法,在家赚钱的副业兼职
  10. 服务器上传图片不显示,网站后台上传图片失败或不显示的原因
  11. 定时器0练习,利用左循环函数_crol_(a,b)
  12. 关于 EOF EOF; 是什么意思?
  13. sd卡 格式化 命令 linux,在Linux命令行上格式化SD卡、USB驱动器、闪存驱动器的方法...
  14. 网上流传“魔方文化启示录”
  15. 阿里云的ECS和AWS的EC2比较
  16. 【Python从入门到精通】二、核心编程:5.正则表达式
  17. 微信小程序实现微信支付
  18. 小强升职记思维导图_《小强升职记》思维导图与总结
  19. Oracle表连接优化思路
  20. Android开发之——卸载系统应用

热门文章

  1. jq分页 不刷新页面_jQuery无刷新分页完整实例代码
  2. 第一季2:视频设备开发的技术流
  3. platform驱动开发套路、DM9000的一些分析
  4. C++远征之封装篇——对象数组,对象成员
  5. 【Mysql】之视图操作
  6. asp.net core 拦击器制作的权限管理系统DEMO
  7. Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法
  8. 命令行运行jmeter脚本
  9. linux内核启动以及文件系统的加载过程
  10. [Leetcode]@python 107. Binary Tree Level Order Traversal II