每日OJ题_贪心算法四⑧_力扣767. 重构字符串

目录

力扣767. 重构字符串

解析代码


力扣767. 重构字符串

767. 重构字符串

难度 中等

给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。

返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。

示例 1:

输入: s = "aab"
输出: "aba"

示例 2:

输入: s = "aaab"
输出: ""

提示:

  • 1 <= s.length <= 500
  • s 只包含小写字母
class Solution {
public:
    string reorganizeString(string s) {

    }
};

解析代码

力扣1054. 距离相等的条形码基本一致。

贪心策略:

  • 每次处理一批相同的字母,往 n 个空里面摆放。
  • 每次摆放的时候,隔一个格子摆放一个字母。
  • 先处理出现次数最多的那个字母,剩下的字母可任意。如果出现次数最多的那个数不超过(n + 1)/ 2,则有解,下一个数想相邻的话只能“填一圈”(不可能)。
class Solution {
public:
    string reorganizeString(string s) {
        int hash[26] = {0};
        char mostVal = s[0];
        int maxCount = 0;
        for(auto& e : s) // 统计每个数出现的频次
        {
            ++hash[e - 'a'];
            if(maxCount < hash[e - 'a'])
            {
                maxCount = hash[e - 'a'];
                mostVal = e;
            }
        }
        
        int n = s.size(), index = 0;
        if(maxCount > (n + 1) / 2)
            return "";
        string ret(n, ' ');
        for(int i = 0; i < maxCount; ++i) // 先处理出现次数最多的数
        {
            ret[index] = mostVal;
            index += 2;
        }

        hash[mostVal - 'a'] = 0;
        for(int i = 0; i < 26; ++i) // 处理剩下的数
        {
            for(int j = 0; j < hash[i]; ++j)
            {
                if(index >= n)
                    index = 1;
                ret[index] = i + 'a';
                index += 2;
            }
        }
        return ret;
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 09:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 09:26:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 09:26:04       82 阅读
  4. Python语言-面向对象

    2024-05-14 09:26:04       91 阅读

热门阅读

  1. ASP.NET Core中实现文件上传下载实时进度条功能

    2024-05-14 09:26:04       37 阅读
  2. 手机照片保存地址

    2024-05-14 09:26:04       34 阅读
  3. Elasticsearch做到像mysql这样的表连接Parent-Child实现

    2024-05-14 09:26:04       32 阅读
  4. 使用 Docker 轻松部署 Spring Boot 应用

    2024-05-14 09:26:04       30 阅读
  5. 云端安全新纪元:云WAF的崛起

    2024-05-14 09:26:04       31 阅读
  6. 当它还是幼生期的时候,及早离开它!

    2024-05-14 09:26:04       32 阅读
  7. Kotlin反射:深入探索与多场景应用

    2024-05-14 09:26:04       43 阅读
  8. 在面试中,我常问的c++问题

    2024-05-14 09:26:04       25 阅读
  9. 速盾:scdn是什么

    2024-05-14 09:26:04       31 阅读
  10. [大师C语言(第五篇)]C语言随机数背后的秘密

    2024-05-14 09:26:04       28 阅读