LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划

题目中文:求最长回文子串

题目难度:Medium

题目内容

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

翻译:

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

什么叫回文子串?

  就是字符串中,满足能正读反读都一样的子串,就是回文子串。如下所示

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

我的思路:既然是特殊的子串那么,首先得得到每一个子串。然后用一个方法判定是否是回文,是的话就与答案长度做比较,更长则更新答案。

MyCode

 1     public String longestPalindrome(String s) {
 2         int n = s.length();
 3         String ans = "";
 4         Set<String> set = new HashSet<String>();
 5         for (int i = 0; i < n; i++) {
 6             for (int j = i + 1; j <= n; j++) {
 7                 set.add(s.substring(i, j));
 8             }
 9         }
10         for (String m : set) {
11             if (isPalindromic(m)) {
12                 ans = m.length()>ans.length()?m:ans;
13             }
14         }
15         return ans;
16     }
17
18     public boolean isPalindromic (String m) {
19         String reverse = new StringBuffer(m).reverse().toString();
20         return m.equals(reverse) ? true : false;
21     }

我的算法复杂度:O(N2

结果不出意料:Time Limit Exceeded  

编程过程中出现的问题

1、因为最近在用python参加比赛,所以总是忘记定义变量类型。。。

2、一开始对回文子串理解错误,导致编程出错,所以啊,还是先看清题,理解题目意思再说;

3、String之间的比较一个手抖就直接用了“==”,哎  equals()  啊,我怎么总是对不起你。

然后傻呵呵地看答案去了…………

答案

 1 class Solution {
 2     String ans = "";
 3     public String longestPalindrome(String s) {
 4         for (int i = 0;i < s.length(); i++) {
 5             extendVerify(s,i,i);
 6             extendVerify(s,i,i+1);
 7         }
 8         return ans;
 9     }
10     public void extendVerify(String s, int j, int k) {
11         while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) {
12             j--;
13             k++;
14         }
15         String subString = s.substring(j+1,k);
16         ans = subString.length()>ans.length()?subString:ans;
17     }
18 }

答案算法复杂度:O(N)~ O(N2

答案思路:分两部分,主方法对每个字符进行遍历,然后调用子方法由此字符出发向两边进行扩展,同时用两“指针”对左右的扩展字符进行比较,

调用两次子方法分别验证了以此字符为中心的左右的单数和双数的回文。

此代码还能优化:

1、主方法对s进行判断,如果长度小于2,即可直接返回s;

2、主方法的循环结束条件可以设置成 s.length - 1 , 因为最后一个没法往外扩展(但是0不能省,因为判断偶数扩展的时候必须是从(0,1)这两个开始);

3、子方法最后的更新其实只需要判断  j+1 到 k-1 的长度与  一个maxLen 的比较,然后再将 起始位置 j + 1,与长度  maxLen =  k - j - 1  进行保存,就可以完成更新。



原文地址:https://www.cnblogs.com/Xieyang-blog/p/8603711.html

时间: 2024-10-11 08:28:24

LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划的相关文章

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. 题意解析: 最长回文子串.就是给定一个字符串S,找出其中的最长回文子串,并返回该子串. 解法: 第一种方法显然是循环暴力枚举,复杂度为O(

[LeetCode][Java]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,找到该字符串中最长的回文子串.假设这个子串的最大长度为1000,并且这个最长回文子串是存在且唯一的. 算法分析: 回文字

刷题5. Longest Palindromic Substring

一.题目说明 Longest Palindromic Substring,求字符串中的最长的回文. Difficuty是Medium 二.我的实现 经过前面4个题目,我对边界考虑越来越"完善"了. 总共提交了5次: 第1.2次:Wrong Answer 主要是"cbbd"错误了,重复的判断逻辑上出了点小问题 第3.4次: Time Limit Exceeded 我本地代码运行没问题的,但是提交后,报错.给了一个超长的用例: 321012321001232100123

Java Longest Palindromic Substring(最长回文字符串)

假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padromic string. 下边提供3种思路 1.两側比較法 以abba这样一个字符串为例来看,abba中,一共同拥有偶数个字.第1位=倒数第1位.第2位=倒数第2位......第N位=倒数第N位 以aba这样一个字符串为例来看,aba中.一共同拥有奇数个字符.排除掉正中间的那个字符后,第1位=倒数第1

第五题:Longest Palindromic Substring

题目链接:题目链接 题意:找最长回文子串(注意不是回文序列,不一样,字串需要连续,序列不需要连续) 方法一: 这一题说实话,只想到最"土"的方法,就是找到所有的可能的串,然后得到最长的回文串. 需要注意:回文串有奇数和偶数之分,所以以当前这个点为中心,存在两种:这个点是最中间的点:这个点和之前一个点需要进行比较. 看代码如下: class Solution { public: string longestPalindrome(string s) { int max_len = 0, n

LeetCode第[7]题(Java):Reverse Integer 标签:数学

题目:Reverse Integer 难度:Easy 题目内容: Given a 32-bit signed integer, reverse digits of an integer. Note:Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assum

LeetCode【5】. Longest Palindromic Substring --java实现

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. 题目要求给定字符串的最大对称子字符串,如"aaabccbac

LeetCode 005 Longest Palindromic Substring - Java

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

Longest Palindromic Substring leetcode java

题目: 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. 题解: 第一种方法就是挨个检查,维护全局最长,时间复杂度为O(n3),会TLE. 代码如下: 1 public String longestP