leetcode 5 最长回文串
Posted 小师叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 5 最长回文串相关的知识,希望对你有一定的参考价值。
简介
使用中心扩散法, 发现我的代码有很多的bug.改了很久
简单来说动态规划, 不如 中心扩散法来的容易理解.
code
class Solution {
public:
string longestPalindrome(string s) {
//int n = s.length();
//cout << n << endl;
if(s.size() < 2) {
return s;
}
vector<vector<bool> > dp;
dp.resize(s.length());
for(int i=0; i<s.length(); i++){
dp[i].resize(s.length());
for(int j=0; j<s.length(); j++){
dp[i][j] = false;
}
}
int maxLength = 0;
int maxStart = 0;
for(int i=0; i<s.length(); i++){
dp[i][i] = true;
if(maxLength == 0) {
maxStart = i;
maxLength = 1;
}
int j = i+1;
while(j < s.length() && s[i] == s[j]){
dp[i][j] = true;
if(maxLength < j - i + 1) {
maxLength = j - i + 1;
maxStart = i;
}
j++;
}
}
int i,j,k;
for(i=0; i<s.size(); i++){
// 寻找左边界
//cout << "j " << j << endl;
for(j=i-1; j>=0; j--){
if(dp[j][i] == false)
break;
}
//cout << "j " << j << endl;
// 寻找右边界
for(k=i+1; k<s.size(); k++){
if(dp[i][k] == false){
break;
}
}
while(j>=0 && k < s.size() && s[j] == s[k]){
dp[j][k] = true;
if(k - j + 1 >= maxLength){
maxLength = k - j + 1;
maxStart = j;
}
j--;
k++;
}
}
//cout << "here " << maxStart << " " << maxLength << endl;
return s.substr(maxStart, maxLength);
}
};
状态转移方程
\\[P(i, j)=P(i+1, j-1) \\wedge\\left(S i==S_{j}\\right)
\\]
状态边界条件
\\[P(i, i)=\\text { true }
\\]
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
boolean[][] dp = new boolean[len][len];
for(int i=0; i<len; i++){
dp[i][i] = true;
}
char[] charArray = s.toCharArray();
for(int L=2; L<=len; L++){
for(int i=0; i<len; i++){
int j = L+i-1;
if(j >= len){
break;
}
if(charArray[i] != charArray[j]){
dp[i][j] = false;
} else{
if(j - i < 3){
dp[i][j] = true;
}else{
dp[i][j] = dp[i+1][j-1]; // 如果此次相等, 那么他的状态就等于前一个状态
}
}
if(dp[i][j] && j - i + 1 > maxLen){
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen); // 注意java 里面的substring 与 C++ 中 substr第二个参数不一样. 一个表示坐标, 一个表示个数.
}
}
以上是关于leetcode 5 最长回文串的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode - 5 - Longest Palindromic Substring