当前位置:网站首页>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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。边栏推荐
猜你喜欢

《社会企业开展应聘文职人员培训规范》团体标准在新华书店上架

Auto Scaling 弹性伸缩(运维释放人力)

产品-Axure9英文版,轮播图效果

FinClip | 2022 年 7 月产品大事记

甲方不让用开源【监控软件】?大不了我自己写一个
我写了个”不贪吃蛇“小游戏

使用uniapp 封装一个request 请求

C专家编程 第1章 C:穿越时空的迷雾 1.10 “安静的改变”究竟有多少安静

TCP 可靠吗?为什么?

To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
随机推荐
TypeScript的配置文件tsconfig.json
【无标题】
蒋松廷 荣获第六季完美童模全球总决赛 全球总冠军
C专家编程 第2章 这不是Bug,而是语言特性 2.4 少做之过
ORACLE CLOUD 在国内有数据中心吗?
TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
Detailed explanation of ReentrantReadWriteLock
纯纯粹粹纯纯粹粹
Understand the recommendation system in one article: Outline 02: The link of the recommendation system, from recalling rough sorting, to fine sorting, to rearranging, and finally showing the recommend
C专家编程 第2章 这不是Bug,而是语言特性 2.2 多做之过
leetcode-268.丢失的数字
node连接mongoose数据库流程
黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
请问下这个hologres维表是被缓存了么?怎么直接Finished了
leetcode SVM
yolov5s用自己的数据集进行训练模型
Detailed ReentrantLock
C专家编程 第2章 这不是Bug,而是语言特性 2.1 这关语言特性何事,在Fortran里这就是Bug呀
C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
我写了个”不贪吃蛇“小游戏