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

题目难度: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。

什么叫回文子串?

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

  1. Input: "babad"
  2.  
  3. Output: "bab"
  4.  
  5. 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  进行保存,就可以完成更新。

  1.  

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

  1. 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  2. LeetCode第五题:Longest Palindromic Substring

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  3. 刷题5. Longest Palindromic Substring

    一.题目说明 Longest Palindromic Substring,求字符串中的最长的回文. Difficuty是Medium 二.我的实现 经过前面4个题目,我对边界考虑越来越"完善 ...

  4. LeetCode第[1]题(Java):Two Sum 标签:Array

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  5. 转载-----Java Longest Palindromic Substring(最长回文字符串)

    转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...

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

    假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...

  7. LeetCode第[16]题(Java):3Sum Closest 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, find three integers in S such that the sum is closes ...

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

    题目:Reverse Integer 难度:Easy 题目内容: Given a 32-bit signed integer, reverse digits of an integer. Note:A ...

  9. lintcode :Longest Palindromic Substring 最长回文子串

    题目 最长回文子串 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. 样例 给出字符串 "abcdzdcab",它的最长回文 ...

随机推荐

  1. iOS10以前的本地通知和远程通知

    一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  2. JD-GUI

    JD-GUI http://jd.benow.ca/ JD-GUI可到官網直接下載.官網除了JD-GUI之外,另提供了Eclipse(JD-Eclipse)和IntelliJ(JD-IntelliJ) ...

  3. 微信支付 php发送POST请求

    https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1 <_xml> <mch_id>132</mc ...

  4. Java 之 GUI 编程

    GUI (Graphical User Interface, 图形用户接口) CLI (Command line User Interface, 命令行用户接口) Java 为 GUI 提供的对象都存 ...

  5. 2015-03-11——简析DOM规范

    DOM 0级指浏览器专有的,非标准的方法.对象和集合. DOM 1级 1998年发布包括:DOM coreDOM html DOM 2级 DOM2 core 2000年发布  DOM2 html 20 ...

  6. export,import ,export default的区别

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  7. MariaDB备份之XtraBackup

    一.XtraBackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtrabd数据库进行热备的工具.特点: (1)备份过程快速.可靠: ...

  8. Oracle SQL 外键测试

    测试SQL 创建SQL     t1为主表      t2为子表 create table t1(insert_date number,id int) create table t2(insert_d ...

  9. Django-model基础(Day69)

    阅读目录 ORM 创建表(建立模型) 添加表记录 查询表记录 F查询与Q查询 修改表记录 删除表记录 数据库回顾:http://www.cnblogs.com/yuanchenqi/articles/ ...

  10. 为Windows窗口标题栏添加新按钮

    为Windows窗口标题栏添加新按钮   对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮.你想不想在Windows的窗口标题栏上添加一个新的自 ...