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

}

你可能感兴趣的:(leetcode)