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

题目难度: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. attributes["wv"].nodeValue

    w 获取自定义属性的值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. event chrome firefox 获取点击对象的 id 类

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  3. IO流入门-第四章-FileReader

    FileReader基本用法和方法示例 /* java.io.Reader java.io.InputStreamReader 转换流(字节输入流---->字符输入流) java.io.File ...

  4. explorer.exe中发生未处理的win32异常

    explorer.exe中发生未处理的win32异常的错误提示,是windows系统比较常见的错误事件,多数在开机遇到,也有在电脑使用过程中遇到. 了解explorer.exe进程 从百度百科了解到, ...

  5. java输出pdf

    package snake; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  6. Java并发—同步容器和并发容器

    简述同步容器与并发容器 在Java并发编程中,经常听到同步容器.并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector.Ha ...

  7. Pig、Hive、MapReduce 解决分组 Top K 问题(转)

    问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 5002 bj 6003 wh 1004 sh 4005 wh 2006 bj 100 ...

  8. linux内核打印级别

    1.printk()是一个内核的一个记录日志的机制,经常用来记录信息或者警告.printk可以指定输出日志的优先级,在include/linux/kern_levels.h中有相应的宏定义 #defi ...

  9. Linux基础——centos 跳过管理员密码进行登录(单用户模式、救援模式)

    这里列举了两种更改或者取消管理员密码登录Linux系统的方法,其实两种方法类似,都是想方设法跳过用户认定,直接更改用户文件.更改密码的过程. 为了跳过系统正常启动过程中的某些步骤,必须知道大致的系统启 ...

  10. Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索"

    Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var   reg: TPerlRegEx; begin   ...