程式設計訓練第一期 最長回文子串

2021-10-19 09:31:32 字數 1660 閱讀 7544

給定乙個字串 s,找到 s 中最長的回文子串。

1. 動態規劃

時間複雜度o(n^3)

空間複雜度o(1)

#include

#include

#include

using

namespace std;

class

solution

return

true;}

public

:// 暴力搜尋方法求解字串 s 的最長回文串

string longestpalindrome

(string s)

int maxlen =1;

//記錄最長回文串長度 設定初始值為 1

string res = s.

substr(0

,1);

//儲存最長回文串 設定初始值為 s 的第乙個字元

// 列舉所有長度大於等於 2 的子串

for(

int i =

0; i < size -

1; i++)}

}return res;}}

;

2. 動態規劃

時間複雜度o(n^2)

空間複雜度o(n^2)

#include

#include

#include

using

namespace std;

class

solution

else

if(l ==1)

//構成空串 例'ab' 'bb'

else

if(dp[i]

[j]&& l +

1> res.

size()

)//是回文串且串的長度大於記錄的最長回文串長度}}

return res;}}

;

3. 中心擴散

時間複雜度o(n^2)

空間複雜度o(1)

#include

#include

#include

using

namespace std;

class

solution

else

}return s.

substr

(i +

1, j - i -1)

;// 由於迴圈退出此時i已減一 回文字串首部位置為i+1 尾部位置同樣以加一 回文字串尾部位置為j-1 回文長度(j-1)-(i+1)+1=j-i-1

}public

: string longestpalindrome

(string s)

int maxlen =1;

//記錄最長回文串長度 設定初始值為 1

string res = s.

substr(0

,1);

//儲存最長回文串 設定初始值為 s 的第乙個字元

// 中心位置列舉到 len - 2 即可

for(

int i =

0; i < size -

1; i++)}

return res;}}

;

規劃小結(第一期)

一月一小結,這是規劃裡既定的方案,而從正式開學大現在也剛有31天了,所以寫下第一期的規劃小結,和有關於下一期的規劃安排。在第一期的學習中,其實是在原本的規劃上有一定小的調整的,總結的概括如下 第一 調整了對於bootloader的學習,在這一期主要將bootloader進行了乙個系統的了解,而並未著...

第一期訓練第一題(CodeForces 118A)

問題簡述 輸入一行1到100長度包含大小寫的拉丁字母,條件有 1 把其中的母音字母都刪去,2 在每個子音字母前面都加乙個 號,3 把大寫的子音字母換成小寫。輸出字串。程式說明 用if語句把母音字母刪去得到乙個字串,再用另乙個字串陣列接收它的值,位置相差一位,空出來的位置放 最後用乙個for迴圈把大寫...

第一期訓練題 第五題

time limit 1000 ms memory limit 32768 kb 輸入一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可能有些整數以 0 開頭,這些頭部的 0 應該被忽略掉,除非這個整數就是由若干個 0 組成的,這時這個整數就是0 你的任務是...