题目:

给定一个字符串 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的更多相关文章

  1. leetcode -- 最长回文子串

    题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...

  2. leetcode.字符串.5最长回文子串-Java

    1. 具体题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...

  3. LeetCode.5-最长回文子串(Longest Palindromic Substring)

    这是悦乐书的第342次更新,第366篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第3题(顺位题号是5).给定一个字符串s,找到s中最长的回文子字符串. 您可以假设s ...

  4. LeetCode最长回文子串

    题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: & ...

  5. LeetCode--005--最长回文子串(java)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  6. 最长回文子串 C++实现 java实现 leetcode系列(五)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  7. Java实现 LeetCode 5 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  8. LeetCode(5):最长回文子串

    Medium! 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 长度最长为1000. 示例: 输入: "babad" 输出: "bab&quo ...

  9. LeetCode:最长回文子串【5】

    LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...

随机推荐

  1. 860. Lemonade Change

    class Solution { public: bool lemonadeChange(vector<int>& bills) { , ten = ; for (int i : ...

  2. openstack之安全组管理

    命令概览 (nova-api)[root@cc07 /]# nova help|grep secgroup add-secgroup Add a Security Group to a server. ...

  3. [好文分享]MySQL 加锁处理分析

    原文转自:http://hedengcheng.com/?p=771 背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经 ...

  4. ajax实现

    AJAX是为了实现异步通信,提高用户体验度.JavaScript本身并不具有向服务器发送请求的功能(不使用NodeJs),要么使用window.open()方法重新打开一个页面向服务器发送请求,要么使 ...

  5. myeclipse安装maven

    开始开门见山了,至于maven是什么请百度百科. 第一步: 下载maven,进入maven官网下载:http://maven.apache.org/download.cgi 第二步: 1.解压下载好的 ...

  6. VirtualBox安装增强工具时:Unable to install guest additions: unknown filesystem type 'iso9660'

    解决方法: sudo apt-get install --reinstall linux-image-$(uname -r) 参考:http://askubuntu.com/questions/596 ...

  7. Oracle中B-TREE索引的深入理解(转载)

    索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样.在理解索引时,可以想象一本书, ...

  8. linux ping命令

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...

  9. 20155326刘美岑2016-2017-2《Java程序设计》第三周学习总结

    20155326刘美岑2016-2017-2<Java程序设计>第三周学习总结 教材学习内容总结 基本类型和类类型 基本类型:第三章中讲述的那几种,short.long.int.byte. ...

  10. 【python 字典、json】python字典和Json的相互转换

    [python 字典.json]python字典和Json的相互转换 dump/dumps字典转换成json load/loadsjson转化成字典 dumps.loads直接输出字符 dump.lo ...