longest-palindromic-substring

法1:暴力搜索(但会超时)

遍历全部子串(n+(n−1)+…+1=n(1+n)2n+(n-1)+\ldots+1=\frac{n(1+n)}2),逐一判断:

bool isPalindromic(string s)
{int n = s.size();int i = 0;while (i < n - 1 - i){if (s[i] != s[n - 1 - i])return false;++i;}return true;
}class Solution
{
public:string longestPalindrome(string s) {int max_len = 0;int idx = 0;int i, j;for ( i = 0; i < s.size() - 1; ++i){for (j = i + 1; j < s.size(); ++j){if (isPalindromic(s.substr(i, j - i + 1)) && j - i + 1> max_len){max_len = j - i + 1;idx = i;}}}return s.substr(idx, max_len);}
};

但会超时,不可取。

法2:动态规划

暴力搜索产生大量重复判断,也即动态规划中的重叠子问题,解决重叠子问题,自然跑不了使用动态规划。

  • dp[i][j]:表示子字符串 s[i:j] 是否为回文;
  • 初始化 dp[i][i] == true(自己到自己,单独的字符作为子串), dp[i][i-1] == true,其余为false
  • dp[i][j] == (s[i] == s[j] && (dp[i+1][j-1]))
class Solution
{
public:string longestPalindrome(string s){bool dp[1000][1000];memset(dp, 0, sizeof(dp));int n = s.size();dp[0][0] = true;for (int i = 1; i < n; ++i){dp[i][i] = true;dp[i][i-1] = true;}int lft = 0, rgt = 0;for (int k = 2; k <= n; ++k){for (int i = 0; i <= n-k; ++i)       // 注意:是可以取到 n-k 的,(n-1)-(n-k)+1 == k{if (s[i] == s[i+k-1] && dp[i+1][i+k-2]){dp[i][i+k-1] = true;if (rgt-lft + 1 < k){lft = i;rgt = i+k-1;}}}}return s.substr(lft, rgt-lft+1);}
};

References

[1] LeetCode:Longest Palindromic Substring 最长回文子串

leetcode(5)—— Longest Palindromic Substring(最长回文子串)相关推荐

  1. LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)

    Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Solution:de ...

  2. LeetCode:Longest Palindromic Substring 最长回文子串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  3. Java Longest Palindromic Substring(最长回文字符串)

    假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...

  4. 转载-----Java Longest Palindromic Substring(最长回文字符串)

    转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...

  5. 0005-Longest Palindromic Substring(最长回文子串)

    这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求"一行的浪漫& ...

  6. C++longest palindromic subsequence最长回文子序列算法实现(附完整源码)

    C++longest palindromic subsequence最长回文子序列算法 C++longest palindromic subsequence最长回文子序列算法实现完整源码(定义,实现, ...

  7. leetcode题库:5.最长回文子串Longest Palindrome string

    题目描述: /** 题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/description/  * 题目:最长回 ...

  8. python【力扣LeetCode算法题库】5- 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  9. LeetCode题库5:最长回文子串——JavaScript解答

    题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意 ...

最新文章

  1. 2018-3-31(Nature-Inspired metaheuristic Algoritjms Second Edition第一章)笔记-优化,寻优,元启发式算法
  2. 整理Java基础知识--输出格式知识
  3. Apache常用配置
  4. php中怎么定义page,css @page的使用与定义详解
  5. 2020-11-17(补码的非)
  6. 解决hao123胁持chrome等浏览器主页问题
  7. 4号团队-团队任务5:项目总结会
  8. nj08---process、console
  9. PWA 可用性检测工具
  10. opencv检测相交点_OpenCV:曲线的检测与提取-0
  11. 鸿蒙个人用户怎么申请,鸿蒙OS来了,这些机型的用户可以申请
  12. java8 两个list合并_深入介绍和使用 Java 8 的 Collector 接口和 Collectors 工具类
  13. ArcGIS10.4下载及安装
  14. 有DMX512协议控制的整套硬件解决方案吗?来看一下,舞台灯光同步视频播放DMX控制台
  15. Windows11快捷键大全 win11常用快捷键介绍
  16. java分页前端怎么实现_JavaWeb前端分页显示方法
  17. 专访洪小文:创新的最后一公里是什么?
  18. TTT培训,关于培训师的培训
  19. android studio scala插件,在Android Studio中使用Scala和Java
  20. 期刊论文发表能加分吗

热门文章

  1. equals()重写之后为什么要重写hashCode()方法
  2. thriftserver与spark application的区别
  3. php打印出前一天时间戳,使用php 获取时间今天明天昨天时间戳的详解
  4. php opcache文件还原,php7使用opcache把编译后的php文件存储为文件,实现php源码保护和脚本加速...
  5. Tableau上面地图与条形图结合_Tableau | 20种常用图表(上文)
  6. python画科赫雪花
  7. LeetCode35. 搜索插入位置(二分查找)
  8. 安装torchvision时,报错error: command ‘aarch64-linux-gnu-gcc‘ failed with exit status 1
  9. GDAL学习笔记——OGR投影
  10. fatal error LNK1104: 无法打开***.exe的错误