go解题答案
思路概括:中点扩散法 因为如果是回文,则会两边对称,利用这一点规律去优化
思路核心:
1、把字符串每个点当成是中点,然后向两边扩散比较func getLongestPalindromeSpread( A string , n int ) int { if n==0{ return 0 } res:=1 // 至少是1 // 遍历中点 for i:=0;i<n-1;i++ { // 注意是n-1 temp:=Max(spread(A,i,i),spread(A,i,i+1)) res=Max(res,temp) } return res } func spread(s string,left int,right int)int { count:=len(s) for left>=0 && right<=count-1{ if s[left]==s[right]{ left-- right++ }else{ break } } return right-left+1-2 //减2是因为先移动指针,再进行比较,所以break时要退回 }
go解题答案2
思路概括:动态规划
思路核心:
1、状态转移 范围减1的字符串是回文,加1范围的也才可能是回文
2、dp[left][right]=dp[left+1][right-1]func getLongestPalindrome( A string , n int)int { if n<2{ return n } res:=1 dp := make([][]bool, n+1) for a:=0;a<n+1;a++{ dp[a]=make([]bool,n+1) } for right:=1;right<n;right++{ for left:=0;left<n-1;left++{ if A[left]!=A[right]{ continue } if right==left{ dp[left][right]=true } else if right - left <= 2{ dp[left][right] = true }else { dp[left][right]=dp[left+1][right-1] } if dp[left][right]==true { res= Max(res,right-left+1) } } } return res }
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
从业8年——超级内卷500Q技术经理——目前专注go和微服务架构