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

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"
 1 class Solution {
 2     public String longestPalindrome(String s) {
 3         if(s == null || s.length() == 0){
 4             return s;
 5         }
 6         String res = "";
 7         boolean[][] dp = new boolean[s.length()][s.length()];
 8         int max = 0;
 9         for(int j = 0;j < s.length();j++){
10             for(int i = 0;i <= j;i++){
11                 dp[i][j] = s.charAt(i) == s.charAt(j) &&(j-i<=2 || dp[i+1][j-1]);
12                 if(dp[i][j]){
13                     if(j-i+1 > max){
14                         max = j-i+1;
15                         res = s.substring(i,j+1);
16                     }
17                 }
18             }
19         }
20     return res;
21     }
22 }

2019-03-12 23:11:25

原文地址:https://www.cnblogs.com/NPC-assange/p/10520332.html

时间: 2024-11-02 16:56:09

LeetCode--005--最长回文子串(java)的相关文章

LeetCode刷题-005最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000.示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案.示例 2:输入: "cbbd"输出: "bb" 1 string longestPalindrome(string s) 2 { 3 4 string str = "$#"; 5 for(int i = 0; i &l

LeetCode -- 5 -- 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb" std::string longestPalindrome(std::string s) { const int len = s.size(); if(1 >= len)

LeetCode 5. 最长回文子串 Longest Palindromic Substring

题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb"  解法一 遍历字符串,以每个字母为中心,向两边扩散查找,记录当前最长的回文子串的长度和起始位置.结尾位置.时间复杂度O(n^2) 注意: ①当剩下的字符串长度小于当前m

leetcode 5 最长回文子串问题

题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案.示例 2: 输入: "cbbd"输出: "bb" 方法一暴力求解: 定义一个n*n维的数组flage,flage[i][j] 表示以i开始,以j结束的回文串的长度,如果Si,,,,,,Sj是回文串,那么flage[i][

[LeetCode系列] 最长回文子串问题

给定字符串S, 找到其子串中最长的回文字符串. 反转法: 反转S为S', 找到其中的最长公共子串s, 并确认子串s在S中的下标iS与在S'中的下标iS'是否满足式: length(S) = iS + iS' + length(s). 如果满足则s为搜索结果, 如果不满足我们就继续搜索. DP解法: 定义 P[i][j] = true  <-> Si...Sj是回文串, 否则为false; 则有 P[i+1][j-1] = true && Si = Sj <-> P[

【Leetcode】最长回文子串

中心扩散法 我们观察到回文中心的两侧互为镜像.因此,回文可以从它的中心展开,并且只有 2n−1 个这样的中心. 你可能会问,为什么会是 2n−1 个,而不是 n 个中心?原因在于所含字母数为偶数的回文的中心可以处于两字母之间(例如“abba” 的中心在两个‘b’ 之间). 时间复杂度 O(n^2), 由于围绕中心来扩展回文会耗去 O(n) 的时间,所以总的复杂度为 O(n^2); 空间复杂度 O(1); 执行用时 : 128 ms, 在Longest Palindromic Substring的

【数据结构与算法】动态规划——最长回文子串

最长回文子串 LeetCode:最长回文子串 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 思想: 动态规划,用boolean[][] dp记录每一对字符是否相等: 双循环遍历所有子串情况,每次遍历时,当前子串首尾相等且内层-1字符串dp值为true,则记录dp值为true:全部遍历完,取最长,即为最

leetcode 5 :Longest Palindromic Substring 找出最长回文子串

题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 翻译: 找出字符串s中最长的回文子串,字符串s的最长是1000,假设存在唯一的最长回文子串 法一:直接暴力破解 O(N3)的时间复杂度,运行超

LeetCode之“字符串”:最长回文子串

题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc". 解答: 这个题目的一个简单的解法就是对字符串中的每一个字符,同时向其两边延展,以找到最长回文子串.这种方法是可以的,但要处理回文子串长度为奇数和偶数的两种情况是比较麻烦的.如下图的几个字符串: “a” "aa" "aaa" "