[Go]最长回文子串

  • 题目

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

 


 

解法一:

  • 获取字符串的反转字符串
  • 迭代轮询比对,比如:长度为5的字符串,先遍历长度为5的子串,再遍历长度为4的子串,依次类推;若有相等的子串,则退出遍历

 

 

func longestPalindrome(s string) string {
        num1 := len(s)
    s1 := restr(s,num1)
    return maxsame(s,s1,num1)
}

func restr(str1 string,num1 int) string{
    var str2 string
    for i:=0;i<num1;i++{
        str2 = string(str1[i]) + str2
    }
    return str2
}

func maxsame(s1,s2 string,n1 int) string{
    var s3,s4 string
    for i:=0;i<n1;i++{
        for j:=0;j<=i;j++{
            s3 = s1[j:n1-i+j]
            s4 = s2[i-j:n1-j]
            if s3 == s4{
                return s3
            }
        }
    }
    return ""
}

解法二:传指针类型的值

func longestPalindrome(s string) string {
        num1 := len(s)
    s1 := restr(&s,num1)
    return maxsame(&s,&s1,num1)
}

func restr(str1 *string,num1 int) string{
    var str2 string
    for i:=0;i<num1;i++{
        str2 = string((*str1)[i]) + str2
    }
    return str2
}

func maxsame(s1,s2 *string,n1 int) string{
    var s3,s4 string
    for i:=0;i<n1;i++{
        for j:=0;j<=i;j++{
            s3 = (*s1)[j:n1-i+j]
            s4 = (*s2)[i-j:n1-j]
            if s3 == s4{
                return s3
            }
        }
    }
    return ""
}

 

posted @ 2020-12-20 19:53  弈虫  阅读(182)  评论(0)    收藏  举报