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 ...
随机推荐
- HDU3157:Crazy Circuits——题解
http://acm.hdu.edu.cn/showproblem.php?pid=3157 题目大意:给一个电路 ,起点为+,终点为-,包括起点终点在内的电元件之间有有下界边,求最小流. ————— ...
- [bzoj] 1040 骑士 || 基环外向树dp
原题 给出n个点n条边和每个点的点权,一条边的两个断点不能同时选择,问最大可以选多少. //图是一张基环外向树森林 是不是很像舞会啊- 就是多了一条边. 所以我们考虑一下对于一棵基环外向树,拆掉一条在 ...
- 用ByteArrayOutputStream解决IO流乱码问题
IO中用ByteArrayOutputStream解决乱码问题 --另一种解决乱码的方法 IO中另外一种防止乱码的方法:使用ByteArrayOutputStream在创建ByteArrayOutpu ...
- 高效率JavaScript代码的编写技巧
使用DocumentFragment优化多次append 添加多个dom元素时,先将元素append到DocumentFragment中,最后统一将DocumentFragment添加到页面.该做法可 ...
- 淘淘搜索结果中image属性中有多张图片的处理
solr引擎查询某一个 商品后的结果中,image字段中如果有多张图片路径(用逗号隔开)时,前台会不 显示图片,解决方法如下: package com.taotao.portal.pojo; publ ...
- jq 正则
if(_each_this_type_name == 'post_num'){ var patrn = /^[a-zA-Z0-9]{3,12}$/; if(!patrn.test(_each_this ...
- idea 创建多模块时模块类无法引入
我的原因是类的位置方的不对,由于刚搭建的项目,本来只想做个测试,就直接在java下创建类,然而这居然是个深坑,模块引入了也无法引入这个模块的类. 解决方法:创建com.***.***包后的类可以正常引 ...
- 轻量级HTTP服务器Nginx(配置与调试Nginx)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ixdba.blog.51cto.com/2895551/790611 Nginx ...
- mpvue开发小记
1.组件嵌套组件时,子组件作用域bug 组件A内的slot包含子组件B的话,无法正常使用变量(这种情况下,B组件的template错误地使用了A的作用域). 我的解决方案:减少一层组件提炼,即这种情况 ...
- linux用户管理和文件权限
linux用户管理和文件权限 新建用户:useradd ftpuser useradd -g gxx userxx修改密码:passwd ftpuser新增用户组:# groupadd gr ...