LeetCode 第5题 最长回文子串

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

示例 1:

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

示例 2:

输入: "cbbd"  输出: "bb" */
/*思路:动态规划 ,时间复杂度为O(n ^2) .     boolean:   dp[i][j]  = {s[i-1] = s[j-1] && ( sij间隔小于等于2 ||  dp[i + 1][j - 1]) } (0<i<=j<length+1)                eg:dp[1][3] 代表第1个字符到第3个字符是否为回文                                                                      解释: 1. 如果构成回文,则第一个字符和最后一个字符相同                2. 如果当前子串的长度小于等于2  比如长度为1: a       dp[i][j]的值应该为true.此时i==j                                              长度为2: ab,bb      dp[i][j]的值取决于第一个字符和第二个字符是否相同                                              长度为3: abc,aba    dp[i][j]的值取决于第一个字符和第三个字符是否相同

3.如果当前子串的长度大于3       dp[i][j]的值取决于:                                               第一个字符和最后一个字符是否相同&&第一个字符和最后一个字符之间的串已经是回文                                              eg:  abca  第一个字符和最后一个字符相同,但是bc不是回文 :false                                                   abbc  第一个字符和最后一个字符不同,虽然bb是回文   :false                                                   abba  第一个字符和最后一个字符相同,并且bb是回文   :true

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


原文地址:https://www.cnblogs.com/rainbow-/p/10280189.html

时间: 2024-10-17 02:47:11

LeetCode 第5题 最长回文子串的相关文章

算法题--最长回文子串

题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设?s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring

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

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

转载:LeetCode:5Longest Palindromic Substring 最长回文子串

本文转自:http://www.cnblogs.com/TenosDoIt/p/3675788.html 题目链接 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. 求字符串的最长回文子串 算法1:暴

Leetcode(5)最长回文子串

Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 一开始我的思路如下:回文子串的特点是首尾字母相同,所以我对每一个字母都找到位于它后面的相同字母,利用切片判断这一段是否为回文子串(str[i:j]==str[i:j][::-1]).时间复杂度很高,主要是因为str.find操作非常耗时. class Solution(object): def lo

[Leetcode] 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. 做这道题之前要先了解什么是回文子串.回文串通俗的解释是,分别从字符串两端开始遍历,得到的结果相同,如"abba",从两端的遍历结果都是:&q

【leetcode 简单】 第九十六题 最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不会超过 1010. 示例 1: 输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7. class Solution(object): def longestPalindrome(self, s): &quo

【LeetCode】5# 最长回文子串

题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb" 思路 本题运用了一些动态规划的思想,关于动态规划,可以看看我之前的一篇博客了解一下. LeetCode 探索初级算法 - 动态规划 1.首先要找到最简情况.这道题

Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer. Example 2: Input: "cbbd"

[C++]LeetCode: 99 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的一个最长回文子串.暴力解决办法就是枚举所有的子串,再对每个子串进行回文判断.进行剪枝,我们考虑可以使用动态规划来避免重复的判