LeetCode-409. 最长回文串(Goland实现)

简介: LeetCode-409. 最长回文串(Goland实现)

LeetCode题号:409. 最长回文串


问题描述:

      给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:

假设字符串的长度不会超过 1010。

示例 1:


输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。



解题思路:

1、先定义一个map统计所有字符出现;

2、a、如果没有奇数长度串,len = sum(所有偶数长度和)

      b、如果存在奇数长度串,len = sum(所有偶数长度和)+sum(所有奇数串长度和-1)+1

听我分析完,简单吧;上代码,通俗易懂!



func longestPalindrome(s string) int {
  var m = make(map[string]int)
  for i := 0; i < len(s); i++ {
    //统计所有字母出现次数
    m[string(s[i])]++
    //_, ok := m[string(s[i])]
    //if ok {
    //  m[string(s[i])]++
    //} else {
    //  m[string(s[i])] = 1
    //}
  }
  //回文长度
  var l int = 0
  //标记是否存在奇数对
  var flag = false
  //最长组合,即为,1:存在奇数串,l=所有偶数对长度+(所有奇数串长度-奇数串个数+1)2、不存在奇数串:l=所有偶数对长度
  for _, v := range m {
    if len(m) == 1 {
      return v
    }
    if v%2 == 0 {
      l += v
    } else {
      flag = true
      //奇数串长度变偶数长度
      l += v - 1
    }
  }
  //只要存在奇数串,则最大奇数串可以放最中间,则不需要做减1 处理
  if flag {
    return l + 1
  }
  return l
}



往期回顾:


【1】LeetCode-122. 买卖股票的最佳时机 II(Goland实现)  

【2】LeetCode-剑指 Offer 03. 数组中重复的数字(Goland实现)  

【3】LeetCode-58. 最后一个单词的长度(Goland实现)



目录
相关文章
|
3月前
|
Go
golang力扣leetcode 479.最大回文数乘积
golang力扣leetcode 479.最大回文数乘积
21 0
LeetCode | 234. 回文链表
LeetCode | 234. 回文链表
|
6月前
|
算法
【Leetcode -405.数字转换为十六进制数 - 409.最长回文串】
【Leetcode -405.数字转换为十六进制数 - 409.最长回文串】
23 0
|
6月前
|
程序员
【Leetcode】面试题 01.02. 判定是否互为字符重排、面试题 01.04. 回文排列
目录 面试题 01.02. 判定是否互为字符重排 面试题 01.04. 回文排列
34 0
|
9天前
【力扣】409.最长回文串
【力扣】409.最长回文串
|
3月前
|
Go
golang力扣leetcode 1332. 删除回文子序列
golang力扣leetcode 1332. 删除回文子序列
12 0
|
3月前
|
Go
golang力扣leetcode 234.回文链表
golang力扣leetcode 234.回文链表
10 0
|
3月前
|
机器学习/深度学习
leetcode-234:回文链表
leetcode-234:回文链表
18 0
|
4月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 214. 最短回文串 算法解析
☆打卡算法☆LeetCode 214. 最短回文串 算法解析
|
4月前
|
存储 Java
1457. 二叉树中的伪回文路径 --力扣 --JAVA
给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。
59 3

热门文章

最新文章