Golang Leetcode 516. Longest Palindromic Subsequence.go

时间:2022-06-19
本文章向大家介绍Golang Leetcode 516. Longest Palindromic Subsequence.go,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89211057

思路

dp:方程表示从i到j的长度中,回文子串的长度 Base case: a ->dp[i][i]=1

case 1:s[i]==s[j] a*****a ->dp[i][j]=dp[i+1][j-1]+2

case 2:s[i]!=s[j] abb dp[i][j]=dp[i+1][i] aab dp[i][j]=dp[i][j-1]

code

func longestPalindromeSubseq(s string) int {
	n := len(s)
	dp := make([][]int, n)
	for k := range dp {
		dp[k] = make([]int, n)
	}
	for l := 1; l <= n; l++ {
		for i := 0; i <= n-l; i++ {
			j := i + l - 1
			if i == j {
				dp[i][j] = 1
				continue
			}
			if s[i] == s[j] {
				dp[i][j] = dp[i+1][j-1] + 2
			} else {
				dp[i][j] = mymax(dp[i+1][j], dp[i][j-1])
			}
		}
	}
	return dp[0][n-1]
}

func mymax(x, y int) int {
	if x > y {
		return x
	}
	return y
}