2024.1.13力扣每日一题——构造限制重复的字符串

2024.1.13

      • 题目来源
      • 我的题解
        • 方法一 计数+模拟

题目来源

力扣每日一题;题序:2182

我的题解

方法一 计数+模拟

因为字符串s由小写字母构成,因此使用一个int[26]的数组保存每个字符的数量,然后从最大的字符开始构造结果字符串sb,基于贪心策略,如果当前剩下的最大字符cur的数量大于repeatLimit,则直接添加repeatLimit个cur到sb中,并且计数-repeatLimit,这时要使最终的sb字典序最大,则需要加入除cur外的字符中最大的字符,只需要加1个就行,作用是为了防止cur连续个数>repeatLimit。最终通过模拟构造除结果字符串sb

时间复杂度:O(|S|*n)。|S|表示26个字符,n表示字符串s的长度
空间复杂度:O(|S|)

 public String repeatLimitedString(String s, int repeatLimit) {
    int[] ch=new int[26];
    //计数
    for(int i=0;i<s.length();i++){
        char c=s.charAt(i);
        ch[c-'a']++;
    } 
    StringBuilder sb=new StringBuilder();
    //模拟
    for(int i=25;i>=0;i--){
        int index=i-1;//下一个最大字符
        boolean f=false;//是添加下一个最大字符还是当前字符
        while(index>=-1&&ch[i]>0){
            if(!f){
            	//当前最大字符的数量大于等于repeatLimit,直接在结果集中加入repeatLimit个当前最大字符
                if(ch[i]>repeatLimit){
                    ch[i]-=repeatLimit;
                    sb.append(createS((char)('a'+i),repeatLimit));
                }else{//当前最大字符的数量小于repeatLimit,直接在结果集中加入ch[i]个当前最大字符,当前最大字符清零
                    sb.append(createS((char)('a'+i),ch[i]));
                    ch[i]=0;
                }
                f=!f;
            }else{
            	//找到比当前字符小的最大字符
                while(index>=0&&ch[index]<=0){
                    index--;
                }
                // 能找到,则加入一个比当前字符小的最大字符
                if(index>=0){
                    sb.append((char)('a'+index));
                    ch[index]-=1;
                }else{//找不到,结束循环
                    break;
                }
                f=!f;
            }
        }
    }
    return sb.toString();
}
// 添加count个字符ch
public StringBuilder createS(char ch,int count){
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<count;i++){
        sb.append(ch);
    }
    return sb;
}

更优雅的官方题解

static public int N = 26;
public String repeatLimitedString(String s, int repeatLimit) {
    int[] count = new int[N];
    for (int i = 0; i < s.length(); i++) {
        count[s.charAt(i) - 'a']++;
    }
    StringBuilder ret = new StringBuilder();
    int m = 0;
    for (int i = N - 1, j = N - 2; i >= 0 && j >= 0;) {
        if (count[i] == 0) { // 当前字符已经填完,填入后面的字符,重置 m
            m = 0;
            i--;
        } else if (m < repeatLimit) { // 当前字符未超过限制
            count[i]--;
            ret.append((char)('a' + i));
            m++;
        } else if (j >= i || count[j] == 0) { // 当前字符已经超过限制,查找可填入的其他字符
            j--;
        } else { // 当前字符已经超过限制,填入其他字符,并且重置 m
            count[j]--;
            ret.append((char)('a' + j));
            m = 0;
        }
    }
    return ret.toString();
}

在这里插入图片描述
自己做出来,但是代码没有官方的那么优雅,哈哈哈哈

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PLAN B KRYPTO ASSETS GMBH CO. KG 普兰资产管理公司

引领加密技术不断演进 PLAN B KRYPTO ASSETS普兰资产管理以其独创的「Trident Strategy三叉戟模型」技术为基础&#xff0c;持续推动加密技术的发展&#xff0c;打造 Schutz&#xff08;舒茨盾&#xff09; AI 金融隐私匿名公链。致力于提供高效的技术服务&#xff0c;基于机构…

[Vulnhub靶机] DC-1

[Vulnhub靶机] DC-1靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/dc/DC-1.zip 靶机地址&#xff1a;192.168.67.28 攻击机地址&#xff1a;192.168.67.3 一、信息收集 1.使用 arp-scan 命令扫描网段内存活的…

Multimodal Prototypical Networks for Few-shot Learning

tcGAN is provided with an embedding ϕ T \phi_T ϕT​() of the textual description 辅助信息 作者未提供代码

【论文阅读】Consistency Models

文章目录 IntroductionDiffusion ModelsConsistency ModelsDefinitionParameterizationSampling Training Consistency Models via DistillationTraining Consistency Models in IsolationExperiment Introduction 相比于单步生成的模型&#xff08;例如 GANs, VAEs, normalizi…

怎样制作一本旅游电子相册呢?

​随着数码技术的发展&#xff0c;旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆&#xff0c;还能分享给亲朋好友&#xff0c;甚至上传到社交媒体上&#xff0c;让更多人了解您的旅行故事。那么&#xff0c;如何制作一本精美的旅游…

最新国内可用GPT4、Midjourney绘画、DALL-E3文生图模型教程

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

Redis的主从配置,哨兵模式,集群模式

目录 什么是主从复制&#xff1f; 主从复制的作用&#xff1f; 主从复制的流程&#xff1f; 搭建Redis的主从复制 安装Redis 环境准备 修改内核参数 安装Redis 定义systemd服务管理脚本 修改Redis配置文件&#xff08;Master节点操作&#xff09;192.168.17.25 修改Re…

机器学习周报第28周

目录 摘要Abstract一、文献阅读1.题目&#xff1a;2.摘要3.问题描述4.过去方案5.论文方案6.论文模型7.相关代码 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff…

ZMQ_REQ\REP模式

文章内容&#xff1a; 学习ZMQ库中REQ\REP模式相关的内容 简介 应答模式&#xff1a;REQ&#xff08;客户端&#xff09;和REP&#xff08;服务端&#xff09; 典型的一问一答协议&#xff0c;即客户端需要首先发送hello&#xff0c;服务器则返回word&#xff0c;若客户端发…

深度学习工具-如何选择服务器和GPU

深度学习训练通常需要大量的计算。目前&#xff0c;GPU是深度学习最具成本效益的硬件加速器。与CPU相比&#xff0c;GPU更便宜&#xff0c;性能更高&#xff0c;通常超过一个数量级。此外&#xff0c;一台服务器可以支持多个GPU&#xff0c;高端服务器最多支持8个GPU。更典型的…

分布式缓存

分布式缓存 缓存雪崩 缓存雪崩我们可以简单的理解为&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了&#xff0c;而对数据库 CPU 和内存造成巨大压力&#xff0c;严重的会造成数据库宕机。从而形成一系列连锁反应&#xf…

自动粘贴文本:高效复制中国邮政编码,提升效率,释放创意

在快节奏的现代生活中&#xff0c;时间就是金钱&#xff0c;效率就是生命。中国邮政EMS&#xff0c;作为您的快递服务首选&#xff0c;一直致力于提供更加便捷、高效的寄递体验。今天&#xff0c;我们隆重推出全新功能——"自动粘贴文本"&#xff0c;让您轻松复制邮政…

【EAI 006】ChatGPT for Robotics:将 ChatGPT 应用于机器人任务的提示词工程研究

论文标题&#xff1a;ChatGPT for Robotics: Design Principles and Model Abilities 论文作者&#xff1a;Sai Vemprala, Rogerio Bonatti, Arthur Bucker, Ashish Kapoor 作者单位&#xff1a;Scaled Foundations, Microsoft Autonomous Systems and Robotics Research 论文原…

1.3K Star,让发送短信变的更简单

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;我的公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值。 前言 在日常的开发过程中&#xff0c;短信的发送经常使用&#xff08;尤其是中小型的外…

C#,入门教程(18)——分支语句(switch-case)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(17)——条件语句&#xff08;if-else&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124033376 1、switch概述 switch-case分支语句 可以理解为 大号 的 if-else。 switch语句以switch关键字开头&…

x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)

目录 简介首次用户基本概念功能特点竞品和相关作品进一步阅读 简介 tmux 是一个用于 Unix 操作系统的开源终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;它允许用户在一个终端窗口中创建多个虚拟终端会话&#xff0c;并同时在这些会话之间切换&#xff…

谈⼀谈你对TCPIP四层模型,OSI七层模型的理解

TCP/IP四层模型 对比 OSI七层模型 OSI七层模型 为了增强通⽤性和兼容性&#xff0c;计算机⽹络都被设计成层次机构&#xff0c;每⼀层都遵守⼀定的规则。因此有了OSI这样⼀个抽象的⽹络通信参考模型&#xff0c;按照这个标准使计算机⽹络系统可以互相连接 物理层 通过⽹线、光…

Harbor离线安装

下载安装包 $ wget https://github.com/goharbor/harbor/releases/download/v2.7.4/harbor-offline-installer-v2.7.4.tgz解压 $ tar xvf harbor-offline-installer-v2.7.4.tgz -C /usr/local修改配置 $ cd /usr/local/harbor $ cp harbor.yml.tmpl harbor.yml $ vim harbo…

第 4 课 创建工作空间与功能包

文章目录 第 4 课 创建工作空间与功能包1.工作环境的创建2.ROS功能包的创建 第 4 课 创建工作空间与功能包 消息和服务的创建、发布器和订阅器的编写、服务端和客户端的编写都是基于Ros功能包进行操作的&#xff0c;因此在进行上述操作前&#xff0c;需要先创建工作空间及功能包…

Java期末复习题库(封装,继承,抽象类,接口,GUI)

包与字符串 1.创建包的基本操作 在biology包中的animal包中有human类,它具有name,height,weight的属性,还具有eat(),sleep()和work()的行为,在biology包中的plant包中有flower类,它具有name,color,smell的属性,还具有drink()和blossom()的行为. 现在在一个school包中的garde…
最新文章