Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is , and there exists one unique longest palindromic substring.

自己的解决方案;

public class Solution {
StringBuilder longest = new StringBuilder(""); public String longestPalindrome(String s) {
String ss;
int len = s.length();
int max = 0;
int sublen = 0;
String result = "";
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
ss = s.substring(i, j);
int index = s.indexOf(reverse(ss),j-1);
if (index == j - 1) {
sublen = 2 * (j - 1 - i) + 1;
if (sublen > max) {
max = sublen;
result = s.substring(i, max+i);
}
continue;
} else if (index == j) {
sublen = 2 * (j - i);
if (sublen > max) {
max = sublen;
result = s.substring(i, max+i);
}
continue;
} else {
continue;
}
}
} return result;
} public String reverse(String s) {
StringBuilder sb = new StringBuilder(s);
sb.reverse();
return sb.toString();
}
}

方法正确性是没有问题的,先挨个取子串,查找反串。但在LeetCode上会报超时错误。

参考讨论区的解答

Runtime: 344 ms

在所有JAVA程序里相对靠前

public class Solution {
StringBuilder longest = new StringBuilder(""); public String longestPalindrome(String s) {
if (s.length() <= 1) return s; for (int i = 0; i < s.length(); i++) {
expand(s, longest, i, i); //odd
expand(s, longest, i, i + 1); //even
} return longest.toString();
} private void expand(String s, StringBuilder longest, int i, int j) {
while (i >= 0 && j < s.length()) {
if (s.charAt(i) == s.charAt(j)) {
if (j - i + 1 > longest.length()) {
longest.delete(0, longest.length());
longest.append(s.substring(i, j + 1));
}
i--;
j++;
}
else
break;
}
}
}

代码剖析:

以字符串basdsa为例:

b a s d s a

i=:

odd对应的while循环执行
i=,j=
if (s.charAt(i) == s.charAt(j)) 满足 longest=b
even对应的while循环不满足 if (s.charAt(i) == s.charAt(j))条件break i=: odd对应的while循环执行
i=,j=
if (j - i + > longest.length()) 不满足
i=,j= if (s.charAt(i) == s.charAt(j)) 不满足循环退出
even对应的while循环不满足 if (s.charAt(i) == s.charAt(j))条件break i=: odd对应的while循环执行
i=, j=
if (j - i + > longest.length()) 不满足
i=,j= if (s.charAt(i) == s.charAt(j)) 不满足循环退出
even对应的while循环不满足 if (s.charAt(i) == s.charAt(j))条件break i=: odd对应的while循环执行
i=, j=
if (j - i + > longest.length()) 不满足
i=,j= if (s.charAt(i) == s.charAt(j)) 满足 longest=sds
i=,j= if (s.charAt(i) == s.charAt(j)) 满足 longest=asdsa
i=,j=6不满足while条件退出
even对应的while循环不满足 if (s.charAt(i) == s.charAt(j))条件break i=: odd对应的while循环执行
i=, j=
if (j - i + > longest.length()) 不满足
i=,j= if (s.charAt(i) == s.charAt(j)) 不满足循环退出
even对应的while循环不满足 if (s.charAt(i) == s.charAt(j))条件break i=: odd对应的while循环执行
i=, j=
if (j - i + > longest.length()) 不满足
i=, j=6不满足while条件退出
even对应的while不满足while条件退出

Longest Palindromic Substring2015年6月20日的更多相关文章

  1. 中国式商业智能报表ActiveReports免费公开课,10月20日开讲

    ActiveReports公开课全方位报表解决方案,满足商业报表五大需求 [开课时间]10月20日[主讲老师]葡萄城报表产品经理[开课形式]网络在线公开课[活动费用]前50名免费 适合人群:报表开发人 ...

  2. 2016年12月20日 星期二 --出埃及记 Exodus 21:15

    2016年12月20日 星期二 --出埃及记 Exodus 21:15 "Anyone who attacks his father or his mother must be put to ...

  3. 2016年11月20日 星期日 --出埃及记 Exodus 20:11

    2016年11月20日 星期日 --出埃及记 Exodus 20:11 For in six days the LORD made the heavens and the earth, the sea ...

  4. 2016年10月20日 星期四 --出埃及记 Exodus 19:4

    2016年10月20日 星期四 --出埃及记 Exodus 19:4 `You yourselves have seen what I did to Egypt, and how I carried ...

  5. 【公告】CSDN个人空间将于2014年4月20日全新改版上线

    尊敬的用户:   你们好!           CSDN个人空间将在2014年4月20日全新改版上线!        CSDN个人空间是2008年8月推出的服务,致力于给广大用户提供在线技术分享和资料 ...

  6. 西安活动 | 4月20日「拥抱开源,又见.NET :云时代 • 新契机」

    云计算日渐兴起,成为提升企业效率和生产力的最终解决方案,而云时代也为软件开发模式带来了翻天覆地的变化.可以说 .NET Core就是这个时代催生的产物.自2016年 .NET Core 1.0 发布以 ...

  7. 2018年1月20日上海MVP线下技术分享会纪实

    1月20日正值大寒节气,在微软MVP朱兴亮的组织牵头下,上海MVP自发举办了题为<跟社区专家一起聊聊混合云.领域驱动.区块链和数字营销>的技术交流会.四名来自上海的MVP分别在自己擅长的技 ...

  8. 成都Uber优步司机奖励政策(4月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 北京Uber优步司机奖励政策(4月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. Windows下Nginx的安装与使用(一):配置端口转发

    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过: localhost:8001 //图书 lo ...

  2. SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?

    本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...

  3. android通过代码获取华为手机的EMUI系统版本号

    因为app中用到华为推送,但是华为推送在不同版本上是存在不同问题的,需要单独来处理. 那么最基本的问题是要获取EMUI系统的版本号. 上网翻了很多博客帖子,基本上是在获取root权限下去读取/syst ...

  4. 初学Java scirpt(判断、循环语句)

    在编写代码时,我们经常需要为不同的判断结果来执行不同的动作以及需要反复执行同一段代码,这时我们就需要使用判断和循环语句来实现. 1.判断语句(if) 判断语句经常用的有(if......else).( ...

  5. vue2 与后台信息交互

    vue-resource  是vue的ajax请求插件 vue-resource文档:https://github.com/vuejs/vue-resource/blob/master/docs/ht ...

  6. mvc中DotNetOpenAuth实现了第三方应用访问自己的网站

    以yahoo为例吧,即从yahoo取得用户信息,存到自己的站点,实现了用户信息在一次录入多处共享的功能.以下是在点击了使用yahoo登录本站的链接后执行action:OpenId. ProviderU ...

  7. 京东笔试---通过考试(DP)

    题目描述      小明同学要参加一场考试,考试一共有n道题目,小明必须作对至少60%的题目才能通过考试.考试结束后,小明估算出每题作对的概率,p1,p2,...,pn,你能帮他算出他通过考试的概率吗 ...

  8. 详解 Node + Redux + MongoDB 实现 Todolist

    前言 为什么要使用 Redux? 组件化的开发思想解放了繁琐低效的 DOM 操作,以 React 来说,一切皆为状态,通过状态可以控制视图的变化,然后随着应用项目的规模的不断扩大和应用功能的不断丰富, ...

  9. Centos6.5 rpm方式指定目录安装JDK

    第一步:下载jdk本例使用jdk-7u5-linux-i586.rpm包,登陆到http://www.java.com下载即可. 第二步:检查文件权限及安装情况1.以root权限登陆系统,查看并修改使 ...

  10. Laravel 5.2 教程 - 队列

    一.简介 Laravel 队列组件提供一个统一的 API 集成了许多不同的队列服务,队列允许你延后执行一个耗时的任务,例如延后至指定的时间才发送邮件,进而大幅的加快了应用程序处理请求的速度. 由于本例 ...