leetcode(5)—— Longest Palindromic Substring(最长回文子串)
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(最长回文子串)相关推荐
- LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)
Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Solution:de ...
- LeetCode:Longest Palindromic Substring 最长回文子串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- Java Longest Palindromic Substring(最长回文字符串)
假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...
- 转载-----Java Longest Palindromic Substring(最长回文字符串)
转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...
- 0005-Longest Palindromic Substring(最长回文子串)
这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求"一行的浪漫& ...
- C++longest palindromic subsequence最长回文子序列算法实现(附完整源码)
C++longest palindromic subsequence最长回文子序列算法 C++longest palindromic subsequence最长回文子序列算法实现完整源码(定义,实现, ...
- leetcode题库:5.最长回文子串Longest Palindrome string
题目描述: /** 题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/description/ * 题目:最长回 ...
- python【力扣LeetCode算法题库】5- 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- LeetCode题库5:最长回文子串——JavaScript解答
题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意 ...
最新文章
- 2018-3-31(Nature-Inspired metaheuristic Algoritjms Second Edition第一章)笔记-优化,寻优,元启发式算法
- 整理Java基础知识--输出格式知识
- Apache常用配置
- php中怎么定义page,css @page的使用与定义详解
- 2020-11-17(补码的非)
- 解决hao123胁持chrome等浏览器主页问题
- 4号团队-团队任务5:项目总结会
- nj08---process、console
- PWA 可用性检测工具
- opencv检测相交点_OpenCV:曲线的检测与提取-0
- 鸿蒙个人用户怎么申请,鸿蒙OS来了,这些机型的用户可以申请
- java8 两个list合并_深入介绍和使用 Java 8 的 Collector 接口和 Collectors 工具类
- ArcGIS10.4下载及安装
- 有DMX512协议控制的整套硬件解决方案吗?来看一下,舞台灯光同步视频播放DMX控制台
- Windows11快捷键大全 win11常用快捷键介绍
- java分页前端怎么实现_JavaWeb前端分页显示方法
- 专访洪小文:创新的最后一公里是什么?
- TTT培训,关于培训师的培训
- android studio scala插件,在Android Studio中使用Scala和Java
- 期刊论文发表能加分吗
热门文章
- equals()重写之后为什么要重写hashCode()方法
- thriftserver与spark application的区别
- php打印出前一天时间戳,使用php 获取时间今天明天昨天时间戳的详解
- php opcache文件还原,php7使用opcache把编译后的php文件存储为文件,实现php源码保护和脚本加速...
- Tableau上面地图与条形图结合_Tableau | 20种常用图表(上文)
- python画科赫雪花
- LeetCode35. 搜索插入位置(二分查找)
- 安装torchvision时,报错error: command ‘aarch64-linux-gnu-gcc‘ failed with exit status 1
- GDAL学习笔记——OGR投影
- fatal error LNK1104: 无法打开***.exe的错误