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:
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、动态规划的更多相关文章
- 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- LeetCode第五题:Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 刷题5. Longest Palindromic Substring
一.题目说明 Longest Palindromic Substring,求字符串中的最长的回文. Difficuty是Medium 二.我的实现 经过前面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 ...
- 转载-----Java Longest Palindromic Substring(最长回文字符串)
转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...
- Java Longest Palindromic Substring(最长回文字符串)
假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...
- 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 ...
- LeetCode第[7]题(Java):Reverse Integer 标签:数学
题目:Reverse Integer 难度:Easy 题目内容: Given a 32-bit signed integer, reverse digits of an integer. Note:A ...
- lintcode :Longest Palindromic Substring 最长回文子串
题目 最长回文子串 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. 样例 给出字符串 "abcdzdcab",它的最长回文 ...
随机推荐
- js实现查询关键词,使其高亮
今天做了一个功能:在页面上查询关键,使其高亮显示,实现代码如下: css: <style type="text/css"> .highlight { backgroun ...
- Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~
Oracle 是如何工作的? Select id,name from t order by id ; – SQL 解析(查看语法是否错误,如果没有错误,分析语意,执行此语句的权限) – 执行计划(OR ...
- python split(),os.path.split()和os.path.splitext()函数用法
https://blog.csdn.net/T1243_3/article/details/80170006 # -*- coding:utf-8 -*- """ @ ...
- python - 常用的小方法
常用的小方法: bin() oct() hex() chr() ord() dir() id() len() int() str() type() help() range(10) / rang ...
- Linux(8)- nginx+uWSGI+virtualenv+supervisor 发布web服务器
一.理论梳理 WSGI是web服务器的网关接口,它是一个规范,描述了web服务器(下图中的WEB server)如何与web应用程序(下图中的Application)通信,以及web应用程序如何链接在 ...
- python16_day13【css、js】
一.部局 1.pg-header(title) .pg-header{ height: 48px; background-color: cadetblue; line-height: 48px; mi ...
- JavaScript:关闭当前页面(微信、电脑)
WeixinJSBridge.call('closeWindow'); // 关闭微信浏览器 window.opener=null; window.open('','_self'); window.c ...
- 125. Valid Palindrome(判断忽略标点的字符串是否回文,加个正则,与上一题解法一样)
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- case的嵌套使用
case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ;; esac case语句结构特点如下: 1. ...
- SDWebImage 加载Https自签名证书时的图片问题
你是否遇到了这种情况,好不容易把自签名HTTPS证书配置好了,访问https接口也成功了,但是图片加载不出来? 传了SDWebImageAllowInvalidSSLCertificates 还是没效 ...