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
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 是從兩端向中間靠齊進行的...