Longest Palindromic Substring , Leetcode
来源:互联网 发布:淘宝店铺产品布局 编辑:程序博客网 时间:2024/06/03 22:01
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length ofS is 1000, and there exists one unique longest palindromic substring.
求最长回文子串。
看到这题一瞬间就想到了动态规划,感觉上和求最长公共子序列是异曲同工的。
大二的时候算法这门课用的教材是《计算机算法设计与分析》,第四版,王晓东,电子工业出版社,当时学习动态规划的第一个例子是矩阵连乘问题,所以这题代码的一些细节与书中给出的代码是很相似的。
还是先上代码,通过了 Online Judge,第一次提交的时候超时了,想了一会原样再提交了一次,结果通过了。。。
public String longestPalindrome(String s) {String result = s;int l = s.length();char[] c = new char[l];c = s.toCharArray();boolean[][] b = new boolean[l][l];for(int i = 0;i < l;i++) {b[i][i] = true;}for(int i = 0;i < l - 1;i++) {if(c[i] == c[i + 1]) {b[i][i + 1] = true;}else {b[i][i + 1] = false;}}for(int j = 2;j < l;j++) {for(int i = 0;i < l - j;i++) {if(b[i + 1][i + j - 1] == true && c[i] == c[i + j]) {b[i][i + j] = true;}else {b[i][i + j] = false;}}} loop :for(int i = l - 1;i >= 0;i--) {for(int j = 0;j < l - i;j++) {if(b[j][j + i] == true) {result = s.substring(j, j + i + 1);break loop;}}}return result;}
先定义一个布尔类型的二维数组,b[i][j]为true表示从s[i] 到 s[j]这个子串是回文的。
我们先把这个数组 i <= j 的部分填满
s[i][i],必须都是true
s[i][i + 1],如果这两个数相等,true,否则false
s[i][i + 2],如果s[i]等于s[i + 2],true
s[i][i + 3],如果s[i]等于s[i + 3]并且s[i + 1]等于s[i + 2],true
s[i][i + 4],如果s[i]等于s[i + 4],并且中间的3个数是回文的,true
可以得到规律,从s[i][i + 2]开始,只要首尾两数相等,且中间是回文的,则true
这样的操作,相当于把所有的子串,根据长度由小至大遍历了一遍,所以在判断较长的子串是否回文时,这个子串掐头去尾之后剩下的子串一定是已经判断过的。
完成这个二维数组后,只需找到 j - i 最大的true,返回对应子串即可
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- LeetCode Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- LeetCode -- Longest Palindromic Substring
- LeetCode | Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- JDBC进阶版本(JDBCVersion2)
- 互联网公司面试题库
- 数据挖掘---分类算法之SOFM算法
- Http 协议 post multipart/form-data
- 串行、并行计算自动切换模板
- Longest Palindromic Substring , Leetcode
- eclipse添加源码路径和头文件路径或者过滤文件
- 心得小结
- 微信小程序开发---应用与页面的生命周期
- Linux下的c基础编程——字符串连接
- at sun.reflect.NativeMethodAccessorImpl.invoke0
- Markdown|书单
- 用键盘控制改变实体色彩
- thinkpad t430u win10小红点无反应/停止响应