題目描述
catcher是mca國的情報員,他工作時發現敵國會用一些對稱的密碼進行通訊,比如像這些abba,aba,a,123321,但是他們有時會在開始或結束時加入一些無關的字元以防止別國破解。比如進行下列變化 abba->12abba,aba->abakk,123321->51233214 。因為截獲的串太長了,而且存在多種可能的情況(abaaab可看作是aba,或baaab的加密形式),cathcer的工作量實在是太大了,他只能向電腦高手求助,你能幫catcher找出最長的有效密碼串嗎?
輸入描述:
輸入乙個字串
輸出描述:
返回有效密碼串的最大長度
示例1輸入
abba輸出4
思路1:
以每個字元(奇數長度的回文串)或者字元間空隙(偶數長度的回文串)分別向左右擴充,記錄遇到的最大長度
先考慮奇數個數的回文串,再考慮偶數個數的回文串。
while true:
try:
s=input()
if s==s[::-1]:
maxlength=len(s)
else:
maxlength=0
for i in range(len(s)):#尋找以i-1,i為中點的偶數字串長度
low=i-1
high=i
while (low>=0 and highmaxlength:
maxlength=high-low-1
low=i-1#尋找以i為中點的奇數字串長度
high=i+1
while(low>0 and highmaxlength:
maxlength=high-low-1
print(maxlength)
except:
break
思路2:
理論支援:每當增加乙個新的字母,最大回文串的長度只能增加1或者2,不可能增加更多,並且,新的最大回文串必然要包含這個字母!
所以,從頭到尾掃瞄字串,每增加乙個新的字元,判斷以這個字元結尾,且長度為maxlen+1或者maxlen+2的子串是否為回文,如果是,更新最大回文子串。**如下:
def longeststring(string):
if string[::-1]==string:
return len(string)
maxlength=0
for i in range(len(string)):
if i-maxlength>=1 and string[i-maxlength-1:i+1]==string[i-maxlength-1:i+1][::-1]:
maxlength+=2
continue
if i-maxlength>=0 and string[i-maxlength:i+1]==string[i-maxlength:i+1][::-1]:
maxlength+=1
return maxlength
while true:
try:
string=input()
if string:
print(longeststring(string))
except:
break
字串運用 密碼擷取
catcher 是mca國的情報員,他工作時發現敵國會用一些對稱的密碼進行通訊,比如像這些abba,aba,a,123321,但是他們有時會在開始或結束時加入一些無關的字元以防止別國破解。比如進行下列變化 abba 12abba,aba abakk,123321 51233214 因為截獲的串太長了...
程式設計題 字串運用 密碼擷取
talk is cheap,show me the code.catcher是mca國的情報員,他工作時發現敵國會用一些對稱的密碼進行通訊,比如像這些abba,aba,a,123321,但是他們有時會在開始或結束時加入一些無關的字元以防止別國破解。比如進行下列變化 abba 12abba,aba a...
7 8 8字串擷取
從乙個字串中可以取出指定的子字串,稱為字串的擷取操作。方法名稱 描述public string substring int beginindex 從指定索引擷取到結尾 public string substring int beginindex,int endindex 擷取指定索範圍中的子字串 範...