[LeetCode系列] 最长回文子串问题
反转法: 反转S为S', 找到其中的最长公共子串s, 并确认子串s在S中的下标iS与在S'中的下标iS'是否满足式: length(S) = iS + iS' + length(s). 如果满足则s为搜索结果, 如果不满足我们就继续搜索.
class Solution {
public:
string longestPalindrome(string s) {
if (s.length() <= ) return s;
// DP solution
bool P[][] = {false};
int start = ;
int maxLen = ;
for (int i = ; i < s.length(); i++) {
P[i][i] = true;
}
for (int i = ; i < s.length() - ; i++) {
if (s[i] == s[i+]) {
P[i][i+] = true;
start = i;
maxLen = ;
}
}
for (int len = ; len <= s.length(); len++) {
for (int i = ; i < s.length() - len + ; i++) {
int j = i + len - ;
if (s[j] == s[i] && P[i+][j-]) {
P[i][j] = true;
start = i;
maxLen = len;
}
}
}
return s.substr(start, maxLen);
}
};
class Solution {
public:
string longestPalindrome(string s) {
if (s.length() <= ) return s;
string longest = s.substr(, );
// Center Solution
for (int i = ; i < s.length() - ; i++) {
string res = expandFromCenter(s, i, i);
if (res.length() > longest.length()) longest = res;
res = expandFromCenter(s, i, i+);
if (res.length() > longest.length()) longest = res;
}
return longest;
}
string expandFromCenter(string s, int l, int r) {
while (l >= && r < s.length() && s[l] == s[r]) {
l--;
r++;
}
return s.substr(l+, r-l-);
}
};
Manacher法: 线性时间解法, 比较复杂, 戳.
[LeetCode系列] 最长回文子串问题的更多相关文章
- LeetCode:最长回文子串【5】
LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...
- 【LeetCode】最长回文子串【动态规划或中心扩展】
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...
- Java实现 LeetCode 5 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)
最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...
- 【LeetCode】最长回文子串-中心扩展法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
- leetcode python最长回文子串
回文的意思是正着念和倒着念一样,如:上海自来水来自海上,雾锁山头山锁雾,天连水尾水连天 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: & ...
- [LeetCode] 5. 最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你 ...
- LeetCode 05 最长回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- 【LeetCode】最长回文子串-动态规划法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
随机推荐
- Web前端学习笔记之前端跨域知识总结
0x00 前言 相信每一个前端er对于跨域这两个字都不会陌生,在实际项目中应用也是比较多的.但跨域方法的多种多样实在让人目不暇接.老规矩,碰到这种情况,就只能自己总结一篇博客,作为记录. 0x01 什 ...
- hdu3037 Saving Beans(Lucas定理)
hdu3037 Saving Beans 题意:n个不同的盒子,每个盒子里放一些球(可不放),总球数<=m,求方案数. $1<=n,m<=1e9,1<p<1e5,p∈pr ...
- 20155201 2016-2017-2 《Java程序设计》第四周学习总结
20155201 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 - 第六章要点: 继承:面向对象中,子类继承父类,避免重复的行为定义.继承基本上就是避免多个 ...
- git squash 和 git rebase
In git, what is the difference between merge --squash and rebase? 上面链接的回答中的总结: Both git merge --squa ...
- 计算机基础教程11 - 互联网&内联网
在本章中,我们将看到什么是Internet和Intranet,以及讨论两者之间的异同. 互联网 它是互联计算机网络的全球/全球系统.它使用标准的Internet协议(TCP / IP).Interne ...
- Vi/Vim三种模式
命令模式,底线命令模式,输入模式:
- Ubuntu server 禁止显示器休眠
Linux不让显示器休眠的方法 # setterm -blank # setterm -blank n (n为等待时间)
- Mac adb 安装
一.下载Android studio https://developer.android.google.cn/studio/ 二.安装 首先移动 弹出下面弹框,直接点击OK 提示无法访问Android ...
- gif&png&jpg&webp
几种图片格式的区别和联系 1.http://www.tuicool.com/articles/AbUvI3A
- MQ是什么 RabbitMQ
一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...