Python求最長迴文字串(三重迴圈遍歷所有字串 新)
阿新 • • 發佈:2018-12-15
前兩天自己寫了下,雖然對了,但是思路不太好,網上看了遍歷的思路,瞬間感覺之前好蠢,雖然本質上我的程式碼也是遍歷,但是思路不好。
正確思路就是先遍歷出所有長度大於等於2的字串,然後在逐一判斷這些字串是不是迴文字串就行了,思路清晰了,程式碼就簡單多了,10分鐘就寫完了。
def func(mystr): mylist=[] #接收所有迴文子字串的列表 length=len(mystr)#定義字串長度變數length for i in range(0,length-2):#迴文字串最小2個字元,所以第一層迴圈遍歷就到倒數第二個字元 for j in range(i+1,length):#第二層遍歷,從i+1開始 newstr=mystr[i:j+1]#切出新的字串 # 前兩層for是遍歷出所有子字串 #然後下面這層for迴圈對新字串判斷是否是迴文字串 midlength=len(newstr)//2 for k in range(0,midlength):#因為判斷迴文,只需要遍歷到字串長度的一半就行了 if newstr[k]!=newstr[len(newstr)-k-1]: #如果發現字串收尾不相等,直接結束迴圈, break else: mylist.append(newstr)#如果迴圈完成,沒有break,說明就是迴文字串,將其新增到mylist print(mylist) #然後從mylist中找到最大字串就行了 # 首先找到最大長度 maxlength=0 for item in mylist:# if len(item)>maxlength: maxlength=len(item) #然後再次遍歷從列表中找所有長度等於maxlengh的字串 for item in mylist: if len(item)==maxlength: print(item) # print(max(mylist)) mystr='ccabaabalxyyxlwang' func(mystr)
執行結果: