[LeetCode]最长回文子串 java
题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 示例 1: 输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2: 输入: "cbbd"
输出: "bb"
我知道的有两种方法,还有几种,我还没来得及学会...
一种是暴力
这种就是直接将所有的子串都枚举出来,然后逐个判断求出结果,不用想都知道,这种不是好的解法
因为时间复杂度会很高,会达到O(n³)
第二种是动态规划
先建立一个二维数组dp,令dp[i][j]表示s[i...j] = 1是回文字符串,用其等于0则表示不是回文子串
当然我这里这样遇到了内存问题,貌似是数组开太大了的yuanyin,所有这里最好用boolean类型的
二维数组,那么由 上面的定义就可以知道,如果s.charAt(i)==s.charAt(j)并且dp[i+1][j-1]里面是true,则
dp[i][j]也为true,之后就可以开始做了
先将数组初始化,即相邻两个相同的字母组成的子串和单个的字母都是回文串
所以dp[i][i]为true,dp[i][i+1]也为true
之后再从最长回文子串为3开始筛选,如果长度比已知的最长回文子串长,那么就更新最长回文子串,ok思想就是这样
这里我把数组的初始化和后面的筛选放在一起了
public static String longestPalindrome(String s) {
if (s.length()<=1)
return s;
String longest = s.charAt(0)+"";
int length = s.length();
boolean[][] dp = new boolean[length][length];
for(int j = length-1;j>=0;j--){
//j在前,i在后
for(int i = j;i<length;i++){
dp[j][i] = s.charAt(i)==s.charAt(j)&&((i-j<3)||dp[j+1][i-1]);
if(dp[j][i]&&i-j+1>longest.length()){
longest = s.substring(j,i+1);
}
}
}
return longest;
}
[LeetCode]最长回文子串 java的更多相关文章
- leetcode -- 最长回文子串
题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- leetcode.字符串.5最长回文子串-Java
1. 具体题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...
- LeetCode.5-最长回文子串(Longest Palindromic Substring)
这是悦乐书的第342次更新,第366篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第3题(顺位题号是5).给定一个字符串s,找到s中最长的回文子字符串. 您可以假设s ...
- LeetCode最长回文子串
题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: & ...
- LeetCode--005--最长回文子串(java)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- 最长回文子串 C++实现 java实现 leetcode系列(五)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- Java实现 LeetCode 5 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- LeetCode(5):最长回文子串
Medium! 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 长度最长为1000. 示例: 输入: "babad" 输出: "bab&quo ...
- LeetCode:最长回文子串【5】
LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...
随机推荐
- 使用Ant发布web应用到tomcat
使用Ant发布web应用到tomcat 来自:http://blog.csdn.net/hbcui1984/article/details/1954537 今天在公司用ant写了个部署web应用的脚本 ...
- Query - noConflict() 方法
ps:菜鸟教程 如何在页面上同时使用 jQuery 和其他框架? noConflict() 方法会释放对 $ 标识符的控制,这样其他脚本就可以使用它了. 当然,您仍然可以通过全名替代简写的方式来使用 ...
- 第30章:MongoDB-索引--地理信息索引
①地理信息索引 地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引.在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标. 范例:定义一个商铺的集合 db.sho ...
- AngularJS的select设置默认值
AngularJS的select设置默认值 在使用Angular时候使用select标签时会遇到绑定数据指定默认显示值可这样实现 <!DOCTYPE html> <html ng-a ...
- js基础学习笔记(三)
3.1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看 ...
- HTML5表单新属性
HTML5表单新属性 autofocus 自动聚焦 <input type="text" autofocus> placeholder占位文本 tel ...
- spring-aop代理的生效原理
主要说下spring里aop的生效的原理吧,并不是讲底层的cglib和gdk动态代理. 还是老一套的分析流程,先找到了aop的标签的handler,然后看下在解析这个标签的时候,都干了些什么,其实主要 ...
- JAVA本地读取文件,解决中文乱码问题
JAVA本地读取文件出现中文乱码,查阅一个大神的博客做一下记录 import java.io.BufferedInputStream;import java.io.BufferedReader;imp ...
- 《mysql必知必会》学习_第三章_20180724_欢
P16: use crashcourse; #选择数据库#使用crashcouse这个数据库,因为我没有crashcourse这个数据库,所以用我的hh数据库代替. P17: show databas ...
- firefox浏览器testclient测试接口