leetcode 5(Longest Palindromic Substring)golang實現

  • 思路

    1.因爲可能是aba這種奇數的,可能是abba這種偶數的,先統一處理爲加“#”分割aba=>#a#b#a# ,abba = #a#b#b#a#這樣可以統一成奇數處理
    2.以每一個字符爲開始,向兩邊伸展,(相等繼續,不相等中止)記錄爲半徑,半徑最大的就是最長的迴文。

func longestPalindrome(s string) string {

   slice := make([]string,0,4)

   for _ , char := range s {
       slice = append(slice,"#")
       slice = append(slice,string(char))
   }

   slice = append(slice,"#") //先把字符串加上“#”

   maxR := 0    //記錄最長的半徑
   maxIndex := 0  //記錄最長的 index
   sliceLen := len(slice)

   for index , _ := range slice{

       if(index >=1){

           r := 0
           i := index - 1
           j := index + 1

           for {       //每一個字符 計算最長的半徑

               if i<0 || j >= sliceLen{
                   break
               }

               if(slice[i] == slice[j]){
                   r++
                   i--
                   j++
               }else{
                   break
               }

           }

           if r > maxR{
               maxR = r
               maxIndex = index
           }

       }
   }

   res := ""

   for index,str := range slice{  //maxIndex-maxR到maxIndex+maxR是最長串

       if index >= (maxIndex-maxR) && index <= (maxIndex+maxR) && str != "#"{
           res += str
       } 
   }

   return res

}
發佈了105 篇原創文章 · 獲贊 30 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章