1163. 按字典序排在最后的子串-解题思路推导

news2024/9/22 21:21:10

1163. 按字典序排在最后的子串-解题思路推导

给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。

示例 1:

输入:s = “abab”
输出:“bab”
解释:我们可以找出 7 个子串 [“a”, “ab”, “aba”, “abab”, “b”, “ba”, “bab”]。按字典序排在最后的子串是 “bab”。

示例 2:

输入:s = “leetcode”
输出:“tcode”

关于这一题 ,大家可能会看到很多解题思路,但是呢,其实很多人自己怎么做出来的都不懂,就照搬照抄,我这里就详细说一下这个题目
1.首先大家看一个图片:
在这里插入图片描述
对于上面这个字符串,最大的字符是哪个?
anwser is very easy to carry.
最大的字符是C,这非常明显,那么看我们的题目找出它的所有子串并按字典序排列,返回排在最后的那个子串。
其实就是找出最大的子串,我想问最大子串一定是从最大的字符开始的,这个肯定是的吧,所以呢,我们第一步解题思路,找出最大的字符,其实就是C,代码还是很好写的吧,我这里给出代码

  int init_max_index=0;
   
    for(int i=1;s[i]!='\0';i++){
        if(s[i]>s[init_max_index]){
            init_max_index=i;
        }
    }
    

是不是上面的代码,s[init_max_index]指的就是最大字符,另外我想问,最大值字串一定是从整个字符串从某个下标开始到最优一个字符串吧,这个很好理解的,因为 aa>a aaa>aa abcc>abc ccbb>ccb ,这四个例子可以很好的帮助我们理解了吧。

那么问题又来了,如果最大字符有很多,怎么办,是的,如果有很多那就一个一个比较,那么继续看这张图片
在这里插入图片描述
是不是发现是四个重复的字串串拼接在一起的:
在这里插入图片描述
看下面这张图片,最大值能否从s2的某个下标处开始取得,显然不能啊,因为s1在说s2前面,s1==s2,怎么也得从s1开始吧
在这里插入图片描述
同理下面这个也是:
在这里插入图片描述
所以当我们发现重复字串时,就可以停止继续查找了,综上解题代码如下:

char * lastSubstring(char * s){
    int init_max_index=0;
   
    for(int i=1;s[i]!='\0';i++){
        if(s[i]>s[init_max_index]){
            init_max_index=i;
        }
    }
    
    
     for(int i=0;s[i]!='\0';i++){
        
          if (s[i] != s[init_max_index ]) {
            continue;
        }
        
         if(s[i]==s[init_max_index]&&strcmp(s+i,s+init_max_index)==1){
             init_max_index=i;

         }
         if(s[i]==s[init_max_index]&&i!=init_max_index){
             int j;
             for( j=0;s[i+j]!='\0';j++){
                 if( s[i+j]==s[init_max_index+j]){
                     continue;
                 }
                 else{
                     break;
                 }
                

             }
             if(s[i+j]=='\0'){
                 break;
             }
         }
         
       
     }
    return s+init_max_index;

}

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

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

相关文章

刷爆力扣之种花问题

刷爆力扣之种花问题 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题,每…

YOLOv7 Backbone| 原文源码详解

YOLOv7 Backbone结构详解在之前的文章中,我们以YOLOv5为对象,详细解剖了一只麻雀的内部构造,包括anchor机制、backbone的结构、neck的结构和head的结构。在本篇文章中,我们将以YOLOv7v0.1版本的代码为目标,结合作者团队…

骨骼动画——2D Animation

1、2D骨骼动画 传统的序列帧动画为了达到好的动画效果,理论上来说,图片越多,动作越流畅,往往需要较多的美术资源,虽然效果好但是资源占用较多 而2D骨骼动画是利用3D骨骼动画的制作原理进行制作的,将一张2…

借助 ChatGPT 编写的 libbpf eBPF 工具开发实践教程: 通过例子学习 eBPF

这是一个基于 CO-RE(一次编译,到处运行)的 libbpf 的 eBPF 的开发教程,提供了从入门到进阶的 eBPF 开发实践指南,包括基本概念、代码实例、实际应用等内容。我们主要提供了一些 eBPF 工具的案例,帮助开发者…

大学免费查题接口

大学免费查题接口 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点击跳…

设计模式-day02

4,创建型模式 4.2 工厂模式 4.2.1 概述 需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设…

蓝牙学习六(GATT)

1.简介 GATT-Generic Attribute profle-通用属性配置文件。GATT层是传输真正数据所在的层。包括了一个数据传输和存储架构以及其基本操作。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT&…

查题接口系统

查题接口系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转) 题库…

Bootstrap-jqgrid学习(十六)

jqgrid网站地址: jqGrid demos-jqGrid实例-中文-mn886.nethttps://blog.mn886.net/jqGrid/ 表格属性 分页属性: pagerstring定义翻页用的导航栏,必须是有效的html元素。翻页工具栏可以放置在html页面任意位置 显示总条数 viewrecordsbo…

#分支语句详解

第一章 C语言:分支语句 文章目录第一章 C语言:分支语句前言1、什么是语句?2.分支语句(选择结构)2.1 if语句2.1.1 悬空else2.1.2 if书写形式的对比2.2 switch语句2.2.1 在switch语句中的 break2.2.2 default子句2.2.3 练…

基于频谱的GCN的数学原理

参考链接:如何理解GCN?知乎回答:从热传导模型到GCN从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi) GCN问题本质 图中的每个结点无时无刻不因为邻居和更远的点的影响,而在改…

基于linux的操作系统的通用启动流程(一)

这篇我们讲解linux的通用启动流程,按照我们一贯的方式总分总的节奏,因为后面的每个子系统也很大,所以我们讲解子系统的时候也是按照总分总的方式。注意因为基于linux的各式各样的操作系统绝对不下100个,像嵌入式,然后我们的桌面有fedora,redhat,centos,debian,ubuntu以…

如何定位线上CPU占用过高的问题

系列文章目录 文章目录系列文章目录前言一、定位CPU的流程是什么?二、实操1.测试代码样例2.定位问题实践过程总结前言 一、定位CPU的流程是什么? 项目上线,CPU飙高不下,触发报警,如何定位排查问题。有两种办法1、通过…

JVM内存布局及GC原理

“java的内存布局以及GC原理”是java开发人员绕不开的话题,也是面试中常见的高频问题之一。 java发展历史上出现过很多垃圾回收器,各有各的适应场景,很多网上的旧文章已经跟不上最新的变化。本文详细介绍了java的内存布局以及各种垃圾回收器的…

著名运动员刘诗雯从政,迎来人生高光时刻,张继科还般配吗

曾经有这么一句话:中国男足谁都踢不过,中国乒乓球谁都打不过。也间接地说明了国球队伍人才济济。在众多优秀乒乓球队员当中,刘诗雯最近相当耀眼,听说她已经高升当官了,也和张继科拉开了距离。 据悉,公元202…

Java高效率复习-数据类型和运算符[Java]

第一篇关于JavaSE内容的文章 文章的风格比较涣散,但是都是干货,关于Java系列的,还有就是,我认为只有MySQL基础和JavaSE基础是可以做到可操作性和可执行性较强的。 如果像JavaWeb或者SSM框架这些,光看文章你是根本执行…

tensorflow的GPU加速计算

参考 tensorflow的GPU加速计算 - 云社区 - 腾讯云 一、概述 tensorflow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。tensorflow会给每一个可用的设备一个名称,tf.…

PaO2/FiO2在临床中的应用 氧合指数

主任提问:患者呼吸衰竭时的“氧合指数”大约多少?如何计算?_腾讯新闻 (qq.com) 在 ARDS 柏林定义中,诊断低氧血症需要 PaO2/FiO2≤ 300 mmHg,并可以分为轻中重三个等级(下表)。 ARDS 患者的 PaO2/FiO2越低,死亡率越高,其中重度 ARDS 死亡率高达 45%。需要注意这里 …

生产报工管理系统可以帮助企业解决哪些问题?

随着时代的变迁和信息化技术的发展,市场对制造企业在产品价格、质量以及生产成本等方面提出了更高的要求,车间生产也逐渐向着实时化、透明化和可视化方向发展。其中产报工与跟踪是生产管理中重要的环节,自然是不可缺少信息化的。 企业在报工…

Linux基本命令

目录操作 格式:指令 -[参数] [目录] 1. pwd (Print Working Direcotry) 查看当前工作路径 2. cd (Change Direcotry) 改变 shell 工作目录 3. ls (List Files) 列出当前目录下的文件和目录 ls -[参数] [目录] ls的参数均是短命令,可以使用-后添…