Leetcode5: Longest Palindromic Substring

来源:互联网 发布:淘宝服装卡片祝福语 编辑:程序博客网 时间:2024/05/18 04:30

5. Longest Palindromic Substring

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

题意:

求一个string的最大回文子串的问题。


解答:

利用动态规划。

如果S[i...j]是一个回文子串的话,那么要是S[i-1]==S[j+1],则S[i-1...j+1]也是一个回文子串。依据这个来寻找最长的回文子串。


代码:

class Solution {public:    string longestPalindrome(string s) {        int dp[1000][1000]={0};        int start=0, maxLen=1;                //  每个字符自身就是一个回文子串          for(int i=0; i<s.size(); i++)        dp[i][i]=1;                for(int i=0; i<s.size()-1; i++){            if(s[i]==s[i+1]){                dp[i][i+1]=1;                maxLen=2;                start=i;            }        }                int sLen=s.size();        for(int len=3; len<=sLen; len++){            for(int i=0; i<sLen-len+1; i++){                int j=i+len-1;                // 动态规划                 if(s[i]==s[j] && dp[i+1][j-1]==1){                    dp[i][j]=1;                    maxLen=len;                    start=i;                }            }        }        return s.substr(start, maxLen);    }};


复杂度:

根据代码可知,时间复杂度为O(n^2)。


这一题还有一种时间复杂度为O(n)的解法,会更新的~

0 0
原创粉丝点击