赞
踩
- class Solution {
- public:
- string longestPalindrome(string s) {
- int n=s.size();
- if(n<2) return s;
- vector<vector<bool>> dp(n,vector<bool>(n,false));
- for(int i=0;i<n;i++){
- dp[i][i]=true;
- }
- int maxLen=1;
- int loc=0;
- for(int L=2;L<=n;L++){
- for(int i=0;i<=n-1-L+1;i++){
- int j=i+L-1;
- if(s[i]!=s[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;
- loc=i;
- }
- }
- }
- string res="";
- for(int i=loc;i<loc+maxLen;i++){
- res+=s[i];
- }
- return res;
- }
- };
- class Solution {
- public:
- string longestPalindrome(string s) {
- int n=s.size();
- vector<vector<bool>> dp(n,vector<bool>(n,true));
- for(int i=n-1;i>=0;i--){
- for(int j=i+1;j<n;j++){
- dp[i][j]=(s[i]==s[j]) && dp[i+1][j-1];
- }
- }
- int maxLoc=0;
- int maxLen=1;
- for(int i=0;i<n;i++){
- for(int j=i;j<n;j++){
- if(dp[i][j] && j-i+1>maxLen){
- maxLen=j-i+1;
- maxLoc=i;
- }
- }
- }
- return s.substr(maxLoc,maxLen);
- }
- };
从后到前遍历是为了让每一次遍历时所需用到的子串提前被计算过。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。