leetcode 5 最长回文串
简介
使用中心扩散法, 发现我的代码有很多的bug.改了很久
简单来说动态规划, 不如 中心扩散法来的容易理解.
code
class Solution {
public:
string longestPalindrome(string s) {
//int n = s.length();
//cout << n << endl;
if(s.size() < 2) {
return s;
}
vector<vector<bool> > dp;
dp.resize(s.length());
for(int i=0; i<s.length(); i++){
dp[i].resize(s.length());
for(int j=0; j<s.length(); j++){
dp[i][j] = false;
}
}
int maxLength = 0;
int maxStart = 0;
for(int i=0; i<s.length(); i++){
dp[i][i] = true;
if(maxLength == 0) {
maxStart = i;
maxLength = 1;
}
int j = i+1;
while(j < s.length() && s[i] == s[j]){
dp[i][j] = true;
if(maxLength < j - i + 1) {
maxLength = j - i + 1;
maxStart = i;
}
j++;
}
}
int i,j,k;
for(i=0; i<s.size(); i++){
// 寻找左边界
//cout << "j " << j << endl;
for(j=i-1; j>=0; j--){
if(dp[j][i] == false)
break;
}
//cout << "j " << j << endl;
// 寻找右边界
for(k=i+1; k<s.size(); k++){
if(dp[i][k] == false){
break;
}
}
while(j>=0 && k < s.size() && s[j] == s[k]){
dp[j][k] = true;
if(k - j + 1 >= maxLength){
maxLength = k - j + 1;
maxStart = j;
}
j--;
k++;
}
}
//cout << "here " << maxStart << " " << maxLength << endl;
return s.substr(maxStart, maxLength);
}
};
状态转移方程
\]
状态边界条件
\]
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
boolean[][] dp = new boolean[len][len];
for(int i=0; i<len; i++){
dp[i][i] = true;
}
char[] charArray = s.toCharArray();
for(int L=2; L<=len; L++){
for(int i=0; i<len; i++){
int j = L+i-1;
if(j >= len){
break;
}
if(charArray[i] != charArray[j]){
dp[i][j] = false;
} else{
if(j - i < 3){
dp[i][j] = true;
}else{
dp[i][j] = dp[i+1][j-1]; // 如果此次相等, 那么他的状态就等于前一个状态
}
}
if(dp[i][j] && j - i + 1 > maxLen){
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen); // 注意java 里面的substring 与 C++ 中 substr第二个参数不一样. 一个表示坐标, 一个表示个数.
}
}
leetcode 5 最长回文串的更多相关文章
- Java实现 LeetCode 409 最长回文串
409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...
- LeetCode 409——最长回文串
1. 题目 2. 解答 我们先来看一看回文子串的规律,如果回文子串的长度为偶数,那么其中所有的每个元素都出现了偶数次:如果回文子串的长度为奇数,那么有一个元素出现了奇数次而其余每个元素都出现了偶数次. ...
- leetcode 每日签到 409. 最长回文串
题目: 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: ...
- 字符串的最长回文串:Manacher’s Algorithm
题目链接:Longest Palindromic Substring 1. 问题描述 Given a string S, find the longest palindromic substring ...
- Leetcode0005--Longest Palindromic Substring 最长回文串
[转载请注明]http://www.cnblogs.com/igoslly/p/8726771.html 来看一下题目: Given a string s, find the longest pali ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- ACM题目————最长回文串
Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组cas ...
- MANACHER---求最长回文串
求最长回文串,如果是暴力的方法的话,会枚举每个字符为中心,然后向两边检测求出最长的回文串,时间复杂度在最坏的情况下就是0(n^2),为什么时间复杂度会这么高,因为对于每一个作为中心的字符的检测是独立的 ...
- Manacher's Algorithm 马拉车算法(求最长回文串)
作用:求一个字符串中的最长子串,同时还可以求所有子串的长度. 题目链接: https://vjudge.net/contest/254692#problem/B 最长回文串长度的代码: int Man ...
- (最长回文串 模板) 最长回文 -- hdu -- 3068
http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory ...
随机推荐
- 使用XML的方式编写:@Aspect运用
例子. 接口 public interface Calculator { // 加 public int add(int i, int j); // 减 public int sub(int i, i ...
- 大模型微调实战:通过 LoRA 微调修改模型自我认知
本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知. 本文的一个目的:基于 Qwen1.5-1.8B- ...
- Selenium自动安装并引用浏览器驱动的方法
以往的程序是先下载和把浏览器驱动放在指定目录,然后在基本中引用驱动完成整个浏览器环境配置 刚好在网上看到一个更加简便的方法,记录下来 1.先安装第三方库webdriver_manager,pip in ...
- 在 MySQL 中存储金额数据,应该使用什么数据类型?
在MySQL中存储金额数据时,最推荐使用 DECIMAL 类型(有时也叫做 NUMERIC).DECIMAL 类型是一种精确的数字类型,适合存储具有小数位的金额数据,因为它不会像浮点数类型那样受到精度 ...
- 解决React Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, ... useEffect cleanup function.
在写react程序时遇到警告: Warning: Can't perform a React state update on an unmounted component. This is a no- ...
- Python3批量爬取美女照片并保存到本地(二)
Python3批量爬取美女照片并保存到本地(二) 上一波写错了,很尴尬,就能爬显示的一部分照片,网站有限制,从上波的爬取可以看出来,返回的json中只有一部分图片,其余的需要登录才能下载,我们这次通过 ...
- Linux系统搭建单机MySQL8.0.26版本
概述 本文主要是写Ubuntu22.04搭建MySQL8.0.26版本 环境信息 IP 系统 规格 10.0.0.10 Ubuntu22.04 2c4g 数据库服务安装步骤 下载前置依赖 # 下载li ...
- Java字节流--输出流OutputStream和输入流InputStream
OutputStream和InputStream都是抽象类 OutputStream定义和InputStream定义 OutputStream InputStream public abstract ...
- System.nanoTime() 方法
System.nanoTime() 方法 JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考. 注:1 ...
- 【安装】Ubuntu 20.04下快速安装ROS2 Foxy
参考博客 ROS2安装 有的地方原博主打错了,还没改过来,我按我自己的改好了. 有的地方比如github和raw.githubusercontent.com访问不了,我替换成能用的镜像源了,只求一键复 ...