最长回文字串之暴力解法

发布时间 2023-03-28 22:06:35作者: freephp

最长回文字串是一个典型的算法问题,首先要搞清楚什么是回文。
回文,故名思义就是对称的文字,比如“ABA”,比如“ABABC”中的“AB“。
题目如下:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:

输入:s = "cbbd"
输出:"bb"
 
提示:

1 <= s.length <= 1000
s 仅由数字和英文字母组成

最直接的办法就是暴力枚举,逐个字符去找最长的回文字,具体代码如下所示:

package main

import "fmt"

// Give a string s, find the longest palindromic substring in s
// Give a string s, find the longest palindromic substring
func longestPalindrome(s string) string {
	if len(s) <= 1 {
		return s
	}
	var res []string
	for i := 0; i < len(s); i++ {
		for j := i + 1; j <= len(s); j++ {
			if isPalindrome(s[i:j]) {
				res = append(res, s[i:j])
			}
		}
	}
	var max string
	for _, v := range res {
		if len(v) > len(max) {
			max = v
		}
	}
	return max
}

// judge if a string is palindrome
func isPalindrome(s string) bool {
	if len(s) <= 1 {
		return true
	}
	for i := 0; i < len(s)/2; i++ {
		if s[i] != s[len(s)-1-i] {
			return false
		}
	}
	return true
}
func main() {
	res := longestPlaindrome("sdtdtttdt")
	fmt.Println(res)
}