反向互補子串

2021-06-22 18:07:06 字數 974 閱讀 6194

題目詳情

這是個字串問題。我們的字串只包含大寫字母。我們定義乙個字母和它13位以後的字母互補。即a與n互補,b與o互補,c與p互補……,我們需要找乙個字串的兩個不重疊的子串,其中乙個和另外乙個的翻轉全互補。另外,因為我們的問題來自生物學,所以我們允許這兩個字串的乙個可以刪掉兩個字元(注意:僅允許乙個字串刪掉任意位置的兩個字元,另外乙個必須全部互補上)。我們的目的是求最長的反向互補子串的長度。

輸入格式:

多組資料,每組資料一行,有乙個字串。每個字串長度不超過2000,只有大寫英文本母組成。

輸出格式:

每組資料輸出一行包含乙個整數,表示最長的反向互補子串長度。

答題說明

輸入樣例

abcd

abcdqopn

abon

輸出樣例:02

2解釋:

第乙個樣例,沒有互補的子串。

第二個樣例,ab和no互補,所以反向互補子串的時候我們可以選擇npo,刪掉乙個p即可。

第三個樣例,ab與on反向互補。

題目分析,該題是dp問題,剛剛接觸該問題時,找不到解題點,故而給出了下面的解答,解題錯誤,但是至今還是沒有找到錯在**,錯誤的演算法如下:

//反向互補子串

#include #include //返回從當前引數i開始的字串中反向互補子串的長度

//len是字串str的長度

int complementary(const int i,const char *str,const int len);

//判斷str[i],str[j]是否互補

//互補返回1,否則返回0

int equal(const char *str,int i,int j);

int main()

int equal(const char *str,int i,int j)

利用dp求解,需要找到最優子結構,

子串行 子串

def foo num list 求陣列中最大子串行的和,子串行必須連續 length len num list max value 10000000000 tmp 0 for i in range length tmp max tmp num list i num list i max value...

子串行 子串

1 第一種思路模板是乙個一維的 dp 陣列 int n array.length int dp newint n for int i 1 i n i 例如 最長遞增子串行 在這個思路中 dp 陣列的定義是 在子陣列 array 0 i 中,我們要求的子串行 最長遞增子串行 的長度是 dp i 2 第...

把字串反向排列

pointers on c 這本書上的乙個練習題。編寫函式reverse string,它的原型如下 void reverse string char string void reverse string char string char last char for last char string...