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

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值