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

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

     public String longestPalindrome(String s) {
int n = s.length();
String ans = "";
Set<String> set = new HashSet<String>();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j <= n; j++) {
set.add(s.substring(i, j));
}
}
for (String m : set) {
if (isPalindromic(m)) {
ans = m.length()>ans.length()?m:ans;
}
}
return ans;
} public boolean isPalindromic (String m) {
String reverse = new StringBuffer(m).reverse().toString();
return m.equals(reverse) ? true : false;
}

我的算法复杂度:O(N2

结果不出意料:Time Limit Exceeded  

编程过程中出现的问题

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

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

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

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

答案

 class Solution {
String ans = "";
public String longestPalindrome(String s) {
for (int i = 0;i < s.length(); i++) {
extendVerify(s,i,i);
extendVerify(s,i,i+1);
}
return ans;
}
public void extendVerify(String s, int j, int k) {
while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) {
j--;
k++;
}
String subString = s.substring(j+1,k);
ans = subString.length()>ans.length()?subString:ans;
}
}

答案算法复杂度: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  进行保存,就可以完成更新。

												

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. javascript的解析过程

    引言: javascript是一种解释型的脚本语言,它不同于java或者c#这种编译语言,不需要编译成游览器可识别的语言,而是由游览器动态解析和执行的.(本身就是游览器可以直接识别,javascrip ...

  2. ubuntu-16.04.2-server-amd64.iso

    w

  3. 阻塞IO、非阻塞IO、同步IO、异步IO等

    https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...

  4. Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?

    /*! Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; ...

  5. 微信js分享朋友圈(一)

    1.绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 2.引入js文件 <script type=&q ...

  6. Java I/O(一) NIO概述

    基本概念 BIO:是堵塞I/O,无论是磁盘I/O,还是网络I/O,数据在写入OutputStream和InputStream都可能发生堵塞,一旦有堵塞,线程会失去CPU的使用权(堵塞). NIO:简单 ...

  7. fopen() r+、w+属性详解

    r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容: w+具有读写属性,写的时候如果文件存在,会被清空,从头开始写. r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须 ...

  8. network FAQ

    @1: 参考 ifconfig eth0之后IP总是自动清除,解决方法, 修改vim /etc/network/interfaces 然后执行sudo /etc/init.d/networking r ...

  9. How to make TWebBrowser get focus in Delphi

    How to make TWebBrowser get focus in Delphi   Written by Administrator       Tags: Delphi Twebbrowse ...

  10. springmvc 需要用到的核心jar包

    aopbeanscontextcoreexpressionwebwebmvc