1. 程式人生 > >Python求最長迴文字串(三重迴圈遍歷所有字串 新)

Python求最長迴文字串(三重迴圈遍歷所有字串 新)

前兩天自己寫了下,雖然對了,但是思路不太好,網上看了遍歷的思路,瞬間感覺之前好蠢,雖然本質上我的程式碼也是遍歷,但是思路不好。

正確思路就是先遍歷出所有長度大於等於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)

執行結果: