LeetCode 5 题解
时间:2022-07-23
本文章向大家介绍LeetCode 5 题解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
LeetCode 5 题解
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
思路:动态规划
动态转移方程
dp[i][j] = dp[i+1][j-1] && (s[i]==s[j])
边界条件:
当只有一个字符时候dp[i][i+0] = true
当有两个字符时:dp[i][i+1] =(s[i]==s[i+1])
public class LeetCode5 {
public String longestPalindrome(String s) {
/**
* 动态转移方程
* dp[i][j] = dp[i+1][j-1] && (s[i]==s[j])
*
* 边界条件:
* l 表示 字符长度
* dp[i][j] = true;
* l = 1 时 dp[i][j] = (s[i]== s[j])
*/
char[] charArray = s.toCharArray();
int len = s.length();
boolean[][] dp = new boolean[len][len];
String ans = "";
for(int l = 0; l < len; l++){// 长度为0 1 到len-1
for(int i = 0; i < len;i++){// 开始位置是 i
int j = i + l; // 结束位置是j
if(j >= len ) break;
if(l == 0){ // 边界条件,单个字段是回文
dp[i][j]= true;
}else if(l == 1){// 边界条件 两个字符需要判断
dp[i][j] = (charArray[i] == charArray[i+1]);
}else{
dp[i][j] = dp[i+1][j-1]&&(charArray[i]==charArray[j]);
}
if(dp[i][j] && l+1 > ans.length()){
ans = s.substring(i,j+1); // 包含位置 j
}
}
}
return ans;
}
/**
* @param args
*/
public static void main(String[] args) {
// String s = "babad";
// String s = "cbbd";
String s = "a";
System.out.println(new LeetCode5().longestPalindrome(s));
}
}
- 厚土Go学习笔记 | 34. 一个简单的 web 服务器实现
- sqlplus / as sysdba无法登录的奇怪报错 (r8笔记第36天)
- JSP与EL表达式重点学习笔记(1)
- R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)
- JSP与EL表达式重点学习笔记(2)
- Node.js真的无所不能?那些不适用的应用领域分析
- #!/bin/bash 与#!/bin/sh
- 客户端无法连接数据库的小问题(r8笔记第53天)
- Golang事务模型
- 厚土Go学习笔记 | 35. web服务器实现动态路径
- 数据库连接池、dbutil_知识点全掌握
- Golang 序列化之 ProtoBuf
- Golang RPC 之 gRPC
- 解决连通性问题的四种算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Studio中导入JNI生成的.so库的实现方法
- Android实现文件上传和下载倒计时功能的圆形进度条
- 使用Apache ab进行http性能测试
- Android Imageloader的配置的实现代码
- Linux下如何查看版本信息的方法步骤
- Android开发实现Files文件读取解析功能示例
- Android实现iPhone晃动撤销输入功能 Android仿微信摇一摇功能
- 猿实战21——商品发布之商品数据存储
- Android编程自定义进度条颜色的方法详解
- Android TextView对齐的两种方法
- Android ScrollView实现反弹效果的实例
- Ubuntu 18.04上安装 phpMyAdmin的详细教程
- Android Popupwindow弹出窗口的简单使用方法
- 解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网
- Android编程实现自定义Dialog的大小自动控制方法示例