当前位置:网站首页>LeetCode·1163.按字典序排在最后的子串·最小表示法
LeetCode·1163.按字典序排在最后的子串·最小表示法
2022-08-03 16:30:00 【小迅想变强】
链接:https://leetcode.cn/problems/last-substring-in-lexicographical-order/solution/by-xun-ge-v-xab4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
解题思路
最小表示法
关于最小表示法详细介绍可看链接 最小表示法详解
- i = 0,j = 1,k = 0,表示从i开始k长度和从j开始k长度的字符串相同(i,j表示当前判断的位置)
- 当str[i] == str[j]时,根据上面k的定义,需要进行k+1操作
- 当str[i] > str[j]时,i位置比j位置上字典序要大,那么不能使用j作为开头了,我们要将j向后移动,移动多少呢?因为i开头和j开头的有k个相同的字符,那么就执行 j = j + k +1
- 相反str[i] < str[j]时,执行:i = i + k +1
- 若滑动后i == j,因为两个指针指向的内容都一样,则随意选一个加一以保证比较的两个字符串不同,并且重新开始,清空相同长度 k = 0
暴力求解
暴力枚举字符串每一个元素,判断元素大小
- 当元素大于最大元素时,保存下标,并且设置为最大元素
- 当元素等于最大元素时,判断之后字符字典序大小,保存字典序大的下标
- 当元素小于最大元素时,不处理
这里有个小技巧,当每次都判断之后字符字典序大小时,很显然会超时,但是限制一下每次判断之后字符的长度就不会了,限制长度这里设为20
代码
最小表示法
char * lastSubstring(char * s){
int n = strlen(s);
//最小表示法
int k = 0, i = 0, j = 1;
while (k < n && i+k < n && j+k < n) {
if (s[i + k] == s[j + k]) {
k++;
} else {
if(s[i + k] >= s[j + k])
{
j = j + k + 1;
}else
{
i = i + k + 1;
}
if (i == j) i++;
k = 0;
}
}
i = fmin(i, j);
return s+i;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/last-substring-in-lexicographical-order/solution/by-xun-ge-v-xab4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
暴力求解
char * lastSubstring(char * s){
int len = strlen(s);
int des = 0;
char maxCh = s[0];
for (int i = 1; i < len; i++) {//枚举每一个元素
if (s[i] > maxCh) {//保存最大值
maxCh = s[i];
des = i;
} else if (s[i] == maxCh) {//当元素等于最大元素时,判断之后字符字典序大小,保存字典序大的下标
des = (strncmp(s+des, s+i, 20) >= 0) ? des : i;
}
}
return s+des;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/last-substring-in-lexicographical-order/solution/by-xun-ge-v-xab4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
边栏推荐
- "Avnet Embedded Weekly" Issue 276: 2022.07.25--2022.07.31
- 使用uniapp 封装一个request 请求
- 设置海思芯片MMZ内存、OS内存详解
- 实时渲染流程操作复杂吗,如何实现?
- C专家编程 第3章 分析C语言的声明 3.2 声明是如何形成的
- To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
- 使用 PowerShell 将 Windows 转发事件导入 SQL Server
- Cookie和Session的关系
- EA 改口,称单人游戏是产品组合中“非常重要的一部分”
- Component communication - parent-child component communication
猜你喜欢
产品-Axure9英文版,轮播图效果
QT QT 】 【 to have developed a good program for packaging into a dynamic library
TiKV & TiFlash accelerate complex business queries丨TiFlash application practice
Component communication - parent-child component communication
leetcode SVM
[Unity Getting Started Plan] Basic Concepts (6) - Sprite Renderer Sprite Renderer
Windows 事件转发到 SQL 数据库
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
Windows 事件查看器记录到 MYSQL
虹科分享 | 如何测试与验证复杂的FPGA设计(3)——硬件测试
随机推荐
leetcode-268.丢失的数字
面了个腾讯35k出来的,他让我见识到什么叫精通MySQL调优
To participate in sweepstakes, incoming new programmers magazine welfare!
devops-2:Jenkins的使用及Pipeline语法讲解
Async的线程池使用的哪个?
C语言02、语句、函数
uniapp的webview滑动缩放
Auto Scaling 弹性伸缩(运维释放人力)
CopyOnWriteArrayList details
C专家编程 第1章 C:穿越时空的迷雾 1.6 它很棒,但它符合标准吗
C专家编程 第3章 分析C语言的声明 3.2 声明是如何形成的
leetcode SVM
EA 改口,称单人游戏是产品组合中“非常重要的一部分”
通俗理解apt-get 和pip的区别是什么
自动化部署+整合SSM项目
【AppCube】零代码小课堂开课啦
C专家编程 第3章 分析C语言的声明 3.8 理解所有分析过程的代码段
数据中台“集存通用治”功能场景说明
How ArkUI adapter somehow the screen
最强分布式锁工具:Redisson