LeetCodeOJ——5.Longest Palindromic Substring

来源:互联网 发布:淘宝箱包排名 编辑:程序博客网 时间:2024/05/20 06:53

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.

解题思路:最长回文子串问题,很经典的问题。但一开始怎么也想不出,因此首先暴力一番。

代码:

class Solution {public:    string longestPalindrome(string s) {        int maxlen=0,len,ki=0,kj=0;        for(int i=0;i<s.size();i++){            for(int j=i;j<s.size();j++){                len=judge(i,j,s);                if(len>maxlen){                    maxlen=len;                    ki=i;                    kj=j;                }            }        }        return s.substr(ki,kj-ki+1);    }    int judge(int i,int j,string s){        int m=i,n=j;        while(m<=n){            if(s[m]!=s[n]){                break;            }            m++,n--;        }        if(m<n){            return -1;        }        else{            return j-i+1;            }    }};

显而易见:Time Limit Exceeded,时间复杂度为O(n3)。因此解法二,以字符串的每个字符(字符串长度为奇数,如“aba”)或每两个字符(字符串长度为偶数,如“abba”)为中心,向两边扩展,时间复杂度为O(n2)。

代码如下:

class Solution {public:    string longestPalindrome(string s) {        string tempStr,longestStr("");        for(int i=0;i<s.length();i++){            tempStr=getLongestStr(s,i,i);            if(tempStr.length()>longestStr.length()){                longestStr=tempStr;            }            tempStr=getLongestStr(s,i,i+1);            if(tempStr.length()>longestStr.length()){                longestStr=tempStr;            }        }        return longestStr;    }    string getLongestStr(string s,int i,int j){        for(;i>=0&&j<=s.length();i--,j++){            if(s[i]!=s[j]){                break;            }        }        return s.substr(i+1,j-i-1);    }};
0 0
原创粉丝点击