Longest Palidrome Substring問題

最長迴文子串問題是比較經典的問題,在面試中經常會碰到。主要的解決方法包括暴力求解,動態規劃,備忘錄法等。
對於動態規劃狀態轉移方程爲:
這裏寫圖片描述

C++代碼實現:

#include<iostream>
#include<string>
using namespace std;

string longestpalidsubstring(string s){
    const int n = s.size();
    bool f[n][n];
    fill_n(&f[0][0],n*n,false);
    size_t max_len = 1,start = 0;

    for(size_t i = 0;i < n;i++){
        f[i][i] = true;
        for(size_t j = 0;j < i;j++){
            f[j][i] = ((s[j] == s[i]) && (i - j < 2 || f[j+1][i-1])); //判斷【j,i】區間是否爲迴文子串
            if(f[j][i] && max_len < i - j + 1){
                max_len = i - j + 1;
                start = j; 
            } 
        }
    }
    return s.substr(start,max_len); 
}
int main(){
    string s;
    cout<<"please enter a string: ";
    cin>>s;
    string result = longestpalidsubstring(s);
    cout<<"result = "<<result<<endl;    
    return 0;
}
發佈了66 篇原創文章 · 獲贊 17 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章