题目描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

思路

本题运用了一些动态规划的思想,关于动态规划,可以看看我之前的一篇博客了解一下。

LeetCode 探索初级算法 - 动态规划

1、首先要找到最简情况。这道题中的最简情况就是一个字母(比如“a”)和一对字母(比如”bb“)。

2、根据最简情况向复杂拓展。更长的回文子串肯定是在简单的情况下增长而来的,如何增长呢?就是在上一个回文子串的基础上,左右各加一个同样的字母。

3、针对一个中心,不断向外拓展,直到遇到不是回文子串。

4、遍历字符串,对每一个字符使用一遍拓展检测,保存最长回文子串的长度,便于最后按索引取子串。

源码

public class LongestPalindromicSubstring {
public String longestPalindrome (String s) {
if (s == null || s.length() == 0) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i); // 一字母回文拓展
int len2 = expandAroundCenter(s, i, i + 1); // 二字母回文拓展
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
} // 返回一个回文字串的长度
private int expandAroundCenter (String s, int l, int r) {
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
return r - l - 1;
} public static void main (String[] args) {
LongestPalindromicSubstring lps = new LongestPalindromicSubstring();
String s = "babad";
System.out.println(lps.longestPalindrome(s));
}
}

心得体会

1、从暴力破解方法入手,找到优化方法

2、字符串方法substring()的索引是左闭右开的

最新文章

  1. AngularJS ui-router (嵌套路由)
  2. unicode编码与utf-8 区别
  3. Python + OpenCV2 系列:2 - 图片操作
  4. Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案
  5. ios -- 教你如何轻松学习Swift语法(一)
  6. HTML报表日期格式不对 导致报错ORA-01861: 文字与格式字符串不匹配
  7. ListView、PullToRefreshListView滑动加载可见item
  8. 九 spring和mybatis整合
  9. 2016年12月9日 星期五 --出埃及记 Exodus 21:4
  10. Rhel6-keepalived+lvs配置文档
  11. Linux下文件的权限
  12. iOS应用内HTTP服务上传文件
  13. 文件服务&mdash;&mdash;Vsftpd
  14. php中empty和isset的区别
  15. sql server多行数据(一列)转换成一个字段
  16. linux远程控制
  17. java并发包分析之———AQS框架
  18. mui上拉刷新+下拉加载
  19. 发送HTTP_GET请求 表头application/json
  20. Linux记录-GC分析

热门文章

  1. 12、面向对象的思想(OOP)
  2. WebService—— IDEA创建WebServices
  3. 关于p标签不能嵌套div标签引发的标签嵌套问题总结
  4. springboot整合websocket原生版
  5. MySQL-下载-安装-配置-多版本共存-设置密码-破解密码
  6. 信安周报-第02周:SQL基础
  7. pickle 基础用法
  8. Hibernate自动执行更新方法
  9. MQTT的学习之Mosquitto安装和使用
  10. 带你入门SpringCloud服务发现 | Eurka搭建和使用