Longest Palindromic Substring-----LeetCode
2016-06-13 16:04
363 查看
两种解法,动态规划和KMP变种
动态规划,类似于lcs的解法,数组flag[i][j]记录s从i到j是不是回文
首先初始化,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为有可能出现flag[2][1]这种情况,比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。
接着比较s[i] ?= s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false
代码如下:
动态规划,类似于lcs的解法,数组flag[i][j]记录s从i到j是不是回文
首先初始化,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为有可能出现flag[2][1]这种情况,比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。
接着比较s[i] ?= s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false
代码如下:
class Solution { public: string longestPalindrome(string s) { int len = s.length(), max = 1, ss = 0, tt = 0; bool flag[len][len]; for (int i = 0; i < len; i++) for (int j = 0; j < len; j++) if (i >= j) flag[i][j] = true; else flag[i][j] = false; for (int j = 1; j < len; j++) for (int i = 0; i < j; i++) { if (s[i] == s[j]) { flag[i][j] = flag[i+1][j-1]; if (flag[i][j] == true && j - i + 1 > max) { max = j - i + 1; ss = i; tt = j; } } else flag[i][j] = false; } return s.substr(ss, max); } };
相关文章推荐
- KMP算法的C#实现方法
- JavaScript中数据结构与算法(五):经典KMP算法
- 字符串算法--KMP--Java实现
- KMP算法(转载)
- kmp算法实现
- KMP算法详解
- linux kernel data struct: KMP算法实现
- 求一个字符串中连续出现次数最多的子串
- KMP算法总结
- KMP算法
- KMP字符串匹配算法
- 字符串匹配之KMP算法
- kmp
- 【hiho一下第三周】KMP计算模式串在原串出现次数
- HDU1711 模板题-KMP
- HDU1358:Period
- hdu1711
- POJ 2406 Power Strings
- KMP next[]数组
- kmp 学习 hihocoder #1015