Longest Palindrome go语言实现

Longest Palindrome

题目描述

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.

This is case sensitive, for example "Aa" is not considered a palindrome here.

Note:
Assume the length of given string will not exceed 1,010.

Example:

Input:
"abccccdd"

Output:
7

Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.

原串是回文的思路(理解错题了):

  • 递归所有子树,或者对子串的始终点动态规划。
  • 判断dp[i][j]要用到原来的结果dp[i+1][j-1],用动态规划。从下往上填,从左往右填。
  • 填表顺序:并不是一般的先填边界,而是先填dp[i][i]和dp[i][i+1]。

解:

//原串是回文的写法
func longestPalindrome(s string) int {
    sSlice := []rune(s)
    dp := make([][]bool,len(s),len(s))
    maxLen := 0
    for idx,_ := range dp{
        dp[idx] = make([]bool,len(s),len(s))
    }
    for i:=0;i<len(sSlice);i++{
        dp[i][i] = true
        maxLen = 1
    }
    if len(sSlice)>1{
        for i:=0;i<len(sSlice)-1;i++{
            if sSlice[i] == sSlice[i+1] {
                dp[i][i+1] = true
                maxLen = 2
            }
        }
    }
    if len(sSlice) >= 3{
        for i:=len(sSlice)-3;i>=0;i--{
            for j:=i+2;j< len(sSlice) ;j++ {
                if sSlice[i] == sSlice[j] && dp[i+1][j-1] == true{
                    dp[i][j] = true
                    if j-i+1 > maxLen  {
                        maxLen = j-i+1
                    }
                }
            }
        }
    }
    return maxLen
}

可构成回文串的思路(原题意):

  • 贪心算法。统计字符出现次数。成对计数,再补一个奇数字符。

解:

func longestPalindrome(s string) int {
    sSlice := []rune(s)
    count := make([]int,128)
    for _,elem := range sSlice{
        count[elem]++
    }
    res := 0
    for _,elem := range count{
        res += elem/2*2
        if res%2 == 0 && elem%2 == 1{
            res++
        }
    }
    return res
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 4,889评论 0 0
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,632评论 0 18
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,890评论 0 33
  • 0. 动态规划分析 0.1 动态规划、递归和贪心算法的区别 动态规划就是利用分治思想和解决冗余的办法来处理问题,所...
    dreamsfuture阅读 7,616评论 2 6
  • 特别的想哭,眼泪不由自主的流出,很多事情真的是当你失去时才会特别的怀念,当现在看到以前的文字,一起参加《阅读派...
    释怀886阅读 566评论 0 0

友情链接更多精彩内容