码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Leetcode】1754. Largest Merge Of Two Strings


    题目地址:

    https://leetcode.com/problems/largest-merge-of-two-strings/

    给定两个字符串 s 1 s_1 s1​和 s 2 s_2 s2​,从一个空串 s s s开始,开两个指针 i = j = 0 i=j=0 i=j=0,每一步可以将 s 1 [ i ] s_1[i] s1​[i]或 s 2 [ j ] s_2[j] s2​[j]添到 s s s后面,同时 i i i或 j j j向后挪动一位。问最后得到的最大字典序的 s s s是什么。

    如果 s 1 [ i ] > s 2 [ j ] s_1[i]>s_2[j] s1​[i]>s2​[j],那么显然应该添 s 1 [ i ] s_1[i] s1​[i];反之如果 s 1 [ i ] < s 2 [ j ] s_1[i]s1​[i]<s2​[j],那么显然应该添 s 2 [ j ] s_2[j] s2​[j]。一般地,如果 s 1 [ i ] > s 2 [ j ] s_1[i]>s_2[j] s1​[i]>s2​[j],那么就应该添 s 1 [ i ] s_1[i] s1​[i],反之类似。粗略的原因是这样的,如果 s 1 [ i : i 1 − 1 ] = s 2 [ j : j 1 − 1 ] s_1[i:i_1-1]=s_2[j:j_1-1] s1​[i:i1​−1]=s2​[j:j1​−1],但是 s 1 [ i 1 ] > s 2 [ j 1 ] s_1[i_1]>s_2[j_1] s1​[i1​]>s2​[j1​],先添 s 1 [ i ] s_1[i] s1​[i]可以使 s 1 [ i 1 ] s_1[i_1] s1​[i1​]优先出现在将要添的字符选项里。严格证明可以用反证法。如果此法不优,则按照更优的方法添加字符,当添加到 s 2 [ j 1 ] s_2[j_1] s2​[j1​]的时候,将更优的方法做一个对称变换(即添 s 1 s_1 s1​的时候变为添 s 2 s_2 s2​,反之亦然),那么此时就是添 s 1 [ i 1 ] s_1[i_1] s1​[i1​]了,显然字典序更大。代码如下:

    class Solution {
     public:
      string largestMerge(string s1, string s2) {
        string s;
        for (int i = 0, j = 0; i < s1.size() || j < s2.size();)
    	  s += bigger(s1, s2, i, j) ? s1[i++] : s2[j++];
    
        return s;
      }
    
      bool bigger(string& s1, string& s2, int i, int j) {
        while (i < s1.size() && j < s2.size()) {
          if (s1[i] > s2[j]) return true;
          else if (s1[i] < s2[j]) return false;
          else i++, j++;
        }
    
        return j == s2.size();
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    时间复杂度 O ( min ⁡ { l s 1 , l s 2 } ( l s 1 + l s 2 ) ) O(\min\{l_{s_1},l_{s_2}\}(l_{s_1}+l_{s_2})) O(min{ls1​​,ls2​​}(ls1​​+ls2​​)),空间 O ( 1 ) O(1) O(1)。

  • 相关阅读:
    基于jsp+mysql+ssm大学生社交平台-计算机毕业设计
    [项目管理-21]:技术人员向项目管理转变时的几个常见思维误区与困惑:如何管事?如何管人?
    前端vue scope的定义以及用法
    学习ASP.NET Core Blazor编程系列八——数据校验
    Lumiprobe 活性染料丨吲哚菁绿说明书
    * 论文笔记【Neural Graph Collaborative Filtering】
    Linux aarch64交叉编译之 nodejs js运行时环境
    淘客APP开发定制系统推荐
    java基于ssm的考试辅导网站
    CUDA中的存储空间修饰符
  • 原文地址:https://blog.csdn.net/qq_46105170/article/details/127594795
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号