每日OJ题_贪心算法二⑥_力扣409. 最长回文串

目录

[力扣409. 最长回文串](#力扣409. 最长回文串)

解析代码


力扣409. 最长回文串

409. 最长回文串

难度 简单

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

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

示例 1:

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

示例 2:

复制代码
输入:s = "a"
输出:1

示例 3:

复制代码
输入:s = "aaaaaccc"
输出:7

提示:

  • 1 <= s.length <= 2000
  • s 只由小写 和/或 大写英文字母组成
cpp 复制代码
class Solution {
public:
    int longestPalindrome(string s) {

    }
};

解析代码

贪心策略:用尽可能多的字符去构造回文串:

  • 如果字符出现偶数个,那么全部都可以用来构造回文串。
  • 如果字符出现奇数个,减去一个之后,剩下的字符能够全部用来构造回文串。
  • 最后再判断⼀下,如果有字符出现奇数个,就把它单独拿出来放在中间。
cpp 复制代码
class Solution {
public:
    int longestPalindrome(string s) {
        int ret = 0;
        int hash[123] = { 0 }; //⽤数组模拟哈希表计数,ASCII码最大127,z是122
        for(auto& e : s)
        {
            hash[e]++;
        }
        for(auto& e : hash)
        {
            ret += (e / 2 * 2); // 奇数就去掉1再乘2
        }
        return ret == s.size() ? ret : ret + 1; // 不足原长度就有奇数
    }
};
相关推荐
兰雪簪轩17 分钟前
分布式通信平台测试报告
开发语言·网络·c++·网络协议·测试报告
程序员Xu1 小时前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode
笑脸惹桃花1 小时前
50系显卡训练深度学习YOLO等算法报错的解决方法
深度学习·算法·yolo·torch·cuda
阿维的博客日记2 小时前
LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
算法·leetcode
GEO_YScsn2 小时前
Rust 的生命周期与借用检查:安全性深度保障的基石
网络·算法
程序员Xu2 小时前
【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
笔记·算法·leetcode
jingfeng5143 小时前
C++11可变参数模板、emplace系列接口、包装器
开发语言·c++
THMAIL3 小时前
机器学习从入门到精通 - 数据预处理实战秘籍:清洗、转换与特征工程入门
人工智能·python·算法·机器学习·数据挖掘·逻辑回归
Kevinhbr3 小时前
CSP-J/S IS COMING
数据结构·c++·算法
蕓晨4 小时前
set的插入和pair的用法
c++·算法