1754. 构造字典序最大的合并字符串

news2024/11/20 12:30:59

摘要

1754. 构造字典序最大的合并字符串

一 贪心算法分析

题目要求合并两个字符串 word1 与 word2,且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律,假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到新字符串 merge 中,需要进行分类讨论:

  • 如果 word1[i]>word2[j],此时我们的最优选择是移除 word1[i]加入到 merge 中,从而保证 merge 的字典序最大;

  • 如果 word1[i]<word2[j],此时我们的最优选择是移除 word2[j] 加入到 merge,从而保证 merge 的字典序最大;

  • 如果 word1[i]=word2[j],此时则需要进一步讨论,结论如下:

    • 如果 word1 从i开始的后缀字典序大于 word2 从 j 开始的后缀,则此时优先选择移除 word1[i]加入到 merge 中;
    • 如果 word1 从 i 开始的后缀字典序小于 word2 从 j 开始的后缀,则此时优先选择移除 word2[j] 加入到 merge中;
    • 如果 word1从 i开始的后缀字典序等于 word2从 j开始的后缀,则此时任选一个均可;

当两个字符相等时,则我们最优选择为后缀较大的字符串,分类讨论如下:
-假设 word1[i]=word2[j],此时两个字符串分别从 i,j开始还有 l 个字符相等,则此时word1[i+k]=word2[j+k],k∈[0,l−1]第 l+1 个字符时二者不相等,即满足 word1[i+l]≠word2[j+l],我们可以假设 word1[i+l]<word2[j+l]。

-我们可以得到结论每次选择字典序较大的后缀进行移除一定可以保证得到最优的结果,其余的选择方法不一定能够保证得到最优结果。

图片.png

1.2 复杂度分析

  • 时间复杂度:O((m+n)×max⁡(m,n)),其中 m,n分别表示两个字符串的长度。每次压入字符时需要进行后缀比较,每次两个字符串后缀比较的时间复杂度为 O(max⁡(m,n)),一共最多需要比较 m+n次,因此总的时间复杂度为 O((m+n)×max⁡(m,n))。

  • 空间复杂度:O(m+n),其中 m,n分别表示两个字符串的长度。每次比较时都会生成两个字符串的后缀,所需要的空间为O(m+n)。

1.3 code示例分析

/**
 * @description 利用的是双执行的来执行
  * @param: word1
 * @param: word2
 * @date: 2022/12/24 12:11
 * @return: java.lang.String
 * @author: xjl
*/
public String largestMerge(String word1, String word2) {
    if (word1==""){
        return word2;
    }else if (word2==""){
        return word1;
    }else {
        StringBuilder merge = new StringBuilder();
        int i = 0, j = 0;
        while (i < word1.length() || j < word2.length()) {
            if (i < word1.length() && word1.substring(i).compareTo(word2.substring(j)) > 0) {
                merge.append(word1.charAt(i));
                i++;
            } else {
                merge.append(word2.charAt(j));
                j++;
            }
        }
        return merge.toString();
    }
}

博文参考

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24. 【gRPC系列学习】gRPC安全认证-TLS认证

TLS认证是gRPC比较常见的方式,利用PKI体系,生成客户端证书、服务端证书、以及CA证书,在交互期间进行身份验证,经秘钥协商后,以对称秘钥进行加密通信,保证数据隐私。Basic、Jwt都是要自实现,TLS是官方支持,操作简单。 1. TLS原理 双向认证简单来讲:服务端验证客户端证书…

前端小知识:返回浏览器上一页(back、go、referrer)

官方文档&#xff08;document.referrer&#xff09;&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/API/Document/referrer   官方文档&#xff08;history.back&#xff09; https://developer.mozilla.org/zh-CN/docs/Web/API/History/back   官方文档&#…

DaVinci:曲线之 HSL 曲线

调色页面&#xff1a;曲线Color&#xff1a;CurvesH 指的是色相 Hue&#xff0c;S 指的是饱和度 Saturation&#xff0c;L 指的是亮度 Luminance。DaVinci Resolve 的曲线调板中&#xff0c;除了自定义曲线&#xff0c;还提供了六种基于色相、饱和度或亮度的调节曲线&#xff0…

Akka 进阶(二)Mailbox 邮箱

目录一 默认邮箱配置二 内置邮箱三 自定义邮箱四 配置邮箱五 RequiresMessageQueue接口Actor中的邮箱是一个队列结构&#xff0c;所有发送过来的消息都会在该队列进行排队&#xff0c;在默认情况下&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的模式&#xff0c;假…

如何将ppt图片压缩?统一压缩ppt图片的简单方法

日常生活中经常需要用到ppt&#xff0c;一份PPT少则十几页多则上百页&#xff0c;就很容易造成PPT过大不易传送的情况&#xff0c;其实我们可以先把ppt图片压缩&#xff08;图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图&#xff09;之后再制作成ppt文件&#xff0c;那么…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事&#xff0c;成为了我职业生涯的重要转折点。当时的我在交大读研&#xff0c;对互联网求职一无所知&#xff0c;但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码&#xff0c;我畏畏缩缩地写了一个“冒泡排序”&#xff0c;并…

Unity 3D Inspector 视图 || Unity 3D Scene View 视图 || Unity 3D Game View 视图

Unity 3D Inspector 视图 Unity 3D 的 Inspector 视图用于显示当前选定的游戏对象的所有附加组件&#xff08;脚本属于组件&#xff09;及其属性的相关详细信息。 视图布局 以摄像机为例&#xff0c;在 Unity 3D 的 Inspector 视图中显示了当前游戏场景中的 MainCamera 对象所…

腾讯云轻量应用服务器使用 Cloudreve 应用镜像搭建个人私有云盘!

Cloudreve 是一款开源的网盘软件&#xff0c;支持服务器本机及腾讯云对象存储 COS 等多种存储方式&#xff0c;提供离线下载、拖拽上传、在线预览等功能&#xff0c;能够帮助您快速搭建个人使用或多人共享的云盘系统。该镜像基于 CentOS 8.2 64位操作系统&#xff0c;已集成宝塔…

OpenAI | GPT-3新模型Davinci,将AI写作提升到新水平!网友惊呼:GPT-4要来了?

文 | 王思若20年&#xff0c;OpenAI推出了1750亿参数量的屠榜‘杀器’GPT-3&#xff0c;但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量&#xff0c;OpenAI将GPT-3以付费API的形式向公众开放。通过调用GPT-3的API&#xff0c;问答、语义检索、翻译、数学推…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息 进行…

【Linux】调试器gdb的使用

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;什么是gdb…

2022-忙碌的一年

&#xff08;点击即可听音频&#xff09;前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

自定义coco数据集

1、环境 anaconda环境安装配置 2、工具 安装labelme工具 3、安装软件 3.1、打开anaconda控制台 3.2、创建虚拟环境 conda create -n labelme python3.73.3、激活环境 conda activate labelme3.4、下载labelme pip install labelme3.5、输入labelme打开软件 以后打开跳…

微信小程序--P2P消息收发模式(MQTT)

目录 前言 js demo 参数 new Paho.Client 创建对象 onConnectionLost 连接丢失回调 onMessageArrived 监听数据 connect (connectOptions)将此消息客户端连接到其服务器。 mqtt 频繁断开和重连问题 小程序实践 前言 P2P&#xff0c;顾名思义&#xff0c;是一对一的消…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Layout

到今天这一篇vTESTstudio工具栏介绍就将暂时告一段落了&#xff0c;后续如果大家有需求的话可以私信我&#xff0c;我就继续再往深的介绍&#xff0c;如果没有催更的话&#xff0c;就当这部分是给大家做个普及&#xff0c;作为一个扫盲篇吧&#xff0c;实际项目使用和编程的内容…

Nginx反向代理的一个算法API的接口调用超时:504,GateWay Timeout,怎么破?

背景 服务端由第三方部署了一个基于 darknet &#xff08;一个较为轻型的完全基于C与CUDA的开源深度学习框架&#xff09;的识别算法服务&#xff0c;通过 Flask 的 Web 服务对业务服务暴露 API 接口。作为测试&#xff0c;一开始是直接通过 python3 app.py 的命令行启动的服务…

SAP Product Lifecycle Costing 里的 Costing Sheet 成本核算表

有朋友在我的知识星球里向我提问&#xff1a; 请您帮忙讲一下这个AP0100的costing sheet rows这里都表示什么意思吗&#xff1f;比如row10、base Z010、overhead啥、描述、from、to row、credit都说明了什么&#xff0c;能够实现上面&#x1f446;&#x1f3fb;的目标吗&#x…

【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟&#xff0c;后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

Transformer图解

Transformer正在席卷自然语言处理领域。 这些令人难以置信的模型正在打破多项 NLP 记录并推动最先进的技术发展。 它们被用于许多应用程序&#xff0c;如机器语言翻译、会话聊天机器人&#xff0c;甚至为更好的搜索引擎提供动力。 Transformer在当今深度学习领域风靡一时&…

POSTGRESQL 13.1 bug 与 逻辑复制槽参数调优

随着问问题的同学越来越多&#xff0c;公众号内部私信回答问题已经很困难了&#xff0c;所以建立了一个群&#xff0c;关于各种数据库的问题都可以&#xff0c;目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS&#xff0c;SQL SERVER 等&#xff0c;期待你的加入&#…