最大的對稱子串

2021-09-30 12:56:11 字數 2311 閱讀 1217

1.輸入字串中對稱的子字串的最大長度。比如輸入字串「roorle」,由於該字串裡最長的對稱子字串是「roor」,因此輸出4.

(1)用**實現方法;

(2)設計並寫出測試用例,測試自己所實現的方法;

(3)請給出程式設計時容易出現的bug現象,原因;

(4)有無其他實現方法(說明思路即可),比較這兩種實現方法優劣,以及各自容易產生的bug有什麼不同?

1)最長對稱子串可能是偶數個字元,也可能是奇數個字元,分別進行判斷。當判斷的時候,以單個字元或者兩個字元為中心,向左右兩側延伸,判斷其左右兩側的字元是否相同,時間複雜度o(n^2).

int getmaxsubstring(char* pstr)

if(pstr==""||pstr[1]=='\0')

int maxlen = 1;

char* pchar = pstr + 1;

while(*pchar != '\0')

int templen = pright - pleft - 1;

if(templen > maxlen)

//子串為偶數個字元

pleft = pchar - 1;

pright = pchar;

while(pleft >= pstr && pright <= &pstr[strlen(pstr) - 1] && *pleft == *pright)

templen = pright - pleft - 1;

if(templen > maxlen)

pchar++;

}return maxlen;

}

2)測試用例

null

「」 a

google

121

aabbaa

111222aabbaa

測試結果正確,如下:

3) 程式設計時可能出現的bug有:

a. 沒有對字串為null的情況進行判斷

b. 最長對稱子串可能是偶數個字元也可能是奇數個字元,程式設計的時候可能考慮不全面

c. pleft >= pstr 和 pright <= &pstr[strlen(pstr) - 1] 沒有新增等號,沒有判斷邊界情況

4) 上述演算法的時間複雜度為o(n^2),也可以對字串的每乙個子串進行判斷,遍歷字串的每乙個字元,然後從該字元開始依次向後取以該字元開始的每乙個子串,判斷該子串是否為對稱子串,然後取最長的對稱子串即可,這種方法時間複雜度高,為o(n^3)。

完整**如下:

#include 

using

namespace

std;

int getmaxsubstring(char* pstr)

if(pstr==""||pstr[1]=='\0')

int maxlen = 1;

char* pchar = pstr + 1;

while(*pchar != '\0')

int templen = pright - pleft - 1;

if(templen > maxlen)

//子串為偶數個字元

pleft = pchar - 1;

pright = pchar;

while(pleft >= pstr && pright <= &pstr[strlen(pstr) - 1] && *pleft == *pright)

templen = pright - pleft - 1;

if(templen > maxlen)

pchar++;

}return maxlen;

}void main()

//2.字串為空

b=getmaxsubstring("");

if (b==1)

//3.字串只有乙個元素

c=getmaxsubstring("a");

if (c!=0)

//4.英文本串

d=getmaxsubstring("google");

if (d!=0)

//5.數字字串

e=getmaxsubstring("121");

if (e!=0)

//6.全對稱字串

f=getmaxsubstring("aabbaa");

if (f!=0)

//7.數字與英文混合的字串

g=getmaxsubstring("111222aabbaa");

if (g!=0)

}

對稱子字串的最大長度

題目 輸入乙個字串,輸出該字串中對稱的子字串的最大長度。比如輸入字串 google 由於該字串裡最長的對稱子字串是 goog 因此輸出4。方法 1.值得注意的是,回文的2種形式,aba,abba 1.對於aba的形式,從字串中的每乙個位置i,像兩邊擴充套件一位如果a i 1 a i 1 那麼繼續擴充...

對稱子字串的最大長度

題目 輸入乙個字串,輸出該字串中對稱的子字串的最大長度。比如輸入字串 google 由於該字串裡最長的對稱子字串是 goog 因此輸出4。方法 1.值得注意的是,回文的2種形式,aba,abba 1.對於aba的形式,從字串中的每乙個位置i,像兩邊擴充套件一位如果a i 1 a i 1 那麼繼續擴充...

對稱子字串的最大長度

題目 輸入乙個字串,輸出該字串中對稱的子字串的最大長度。比如輸入字串 google 由於該字串裡最長的對稱子字串是 goog 因此輸出4。author administrator public class main 判斷字串是否為對稱的,首位同時進行比較,時間複雜度為o n 是從兩端向中間靠齊進行的...