Leetcode 之Longest Palindromic Substring(30)
很经典的一道题,最长回文子串,有多种方法。
首先介绍的一种方法是从中间向两边展开。注意区分aba和abba型的回文串;如果当前最长的子串已经当于两边中最长的子串了,则无需再去判断。
//从中间向两边展开
string expandAroundCenter(string s, int c1, int c2)
{
int l = c1, r = c2;
int n = s.length(); while (l >= && r <= n - && s[l] == s[r])
{
l--;
r++;
}
return s.substr(l + , r - l - );
} string longestPalindString(string s)
{
int n = s.length();
if (n == )return s; string longest = s.substr(, );
int mid = n / ;
//
for (int i = ; i < n - ; i++)
{
//如果剩下的字串长度已经小于当前最大长度字串的长度,则无需再比较
if ( * (mid - i + ) < longest.length() && * (n - mid - i)<longest.length())
break;
//如果是aba型的回文串
string p1 = expandAroundCenter(s, mid+i, mid+i);
if (p1.length()>longest.length())
longest = p1; string p2 = expandAroundCenter(s, mid - i, mid - i);
if (p2.length()>longest.length())
longest = p2;
//如果是abba型的回文串
string p3 = expandAroundCenter(s, mid+i, mid+i + );
if (p3.length()>longest.length())
longest = p3; string p4 = expandAroundCenter(s, mid - i, mid - i - );
if (p4.length()>longest.length())
longest = p4;
} return longest;
}
还有一种动态规划的方法,第一次接触,还需慢慢理解。
string longestPalindString(string s)
{
const int n = s.size();
bool f[n][n]; fill_n(&f[][], n*n, false); int max_length = , start = ; for (int i = ; i < n; i++)
{
f[i][i] = true;
for (int j = ; j < i; j++)
{
f[j][i] = (s[j] == s[i] && (i - j < || f[j + ][i - ]));
if (f[j][i] && max_length < (i - j + ))
{
max_length = i - j + ;
start = j;
}
}
}
s.substr(start, max_length);
}
Leetcode 之Longest Palindromic Substring(30)的更多相关文章
- LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法
LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- LeetCode 5 Longest Palindromic Substring(最长子序列)
题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...
- 【JAVA、C++】LeetCode 005 Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- leetcode:Longest Palindromic Substring(求最大的回文字符串)
Question:Given a string S, find the longest palindromic substring in S. You may assume that the maxi ...
- [LeetCode][Python]Longest Palindromic Substring
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/longest ...
- 【LeetCode】Longest Palindromic Substring 解题报告
DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
随机推荐
- BZOJ4199:[NOI2015]品酒大会——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4199 https://www.luogu.org/problemnew/show/P2178#su ...
- BZOJ1026:[SCOI2009]windy数——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2 ...
- [bzoj] 1030 文本生成器 || AC自动机+dp
原题 给出n个字符串,求随机生成一个m长度的字符串,有多少个是可辨识的(即出现了n个字符串中的任意字符串) 正难则反 求有多少个不可辨识的,26^m-不可辨识即为答案 f[i][j]表示填到第i个字符 ...
- React Render Callback Pattern(渲染回调模式)
React Render Callback Pattern,渲染回调模式,其实是将this.props.children当做函数来调用. 例如: 要根据user参数确定渲染Loading还是Profi ...
- 51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
接上一篇,那个递推式显然可以用矩阵快速幂优化...自己随便YY了下就出来了,学了一下怎么用LaTeX画公式,LaTeX真是个好东西!嘿嘿嘿 如上图.(刚画错了一发...已更新 然后就可以过V2了 or ...
- 跳跃表 https://61mon.com/index.php/archives/222/
跳跃表(英文名:Skip List),于 1990 年 William Pugh 发明,是一个可以在有序元素中实现快速查询的数据结构,其插入,查找,删除操作的平均效率都为 . 跳跃表的整体性能可以和二 ...
- 2017-7-18-每日博客-关于Linux下的鲜为人知的10条命令.doc
这篇文章的目的是介绍一些少有人知的Linux命令,它们一定会高效地帮你管理你的桌面/服务器. 1. sudo !!命令 没有特定输入sudo命令而运行,将给出没有权限的错误.那么,你不需要重写整个命令 ...
- 阐述ArrayList、Vector、LinkedList的存储性能和特性?
ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...
- [iptables]iptables 添加log到syslog
比如iptables本来有这么一条: -A PREROUTING -d 125.65.27.xxx/32 -p tcp -m tcp --dport 11060 -j DNAT --to-destin ...
- BAT script to set local account password never expire
BAT script wmic UserAccount where Name="account123" set PasswordExpires=False