[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 "" }

浙公网安备 33010602011771号