当前位置:网站首页>leetcode刷题笔记 763.划分字母区间(中等)
leetcode刷题笔记 763.划分字母区间(中等)
2022-07-29 05:24:00 【露忆丶十二】
1.题目:
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
示例:
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
2.代码:
class Solution {
public:
vector<int> partitionLabels(string s) {
int last[26];
int length = s.size();
//找到每个字符最后出现的位置
for(int i = 0; i < length; ++i){
last[s[i] - 'a'] = i;
}
int start =0, end = 0;
vector<int> sss; //存储划分的数据
for(int i = 0; i < length; ++i){
end = max(end, last[s[i] - 'a']);
if(end == i){
sss.push_back(end-start+1);
start = end + 1;
}
}
return sss;
}
};3.解题思路:
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
结合着上面的例子来看!!
同一个字母只能出现在同一个片段中,还要划分出尽量多的字符串数量,那么每个字母最后一次出现的位置,就有可能是划分字符串的位置,(例子中两次划分的位置是a和e最后出现的位置)在遍历字符串的过程中,通过比对已经遍历的字符最后出现的位置,位置最靠后的一定是截取端,(比如第一个字符串中,字母a的最后出现的位置是s[8],s[0]到s[8]之间包含的字母最后出现的位置都在s[8]之前)并且前一个字符串的结尾是下一个字符串的开头(s[8]是第一个字符串的结尾,s[9]是下一个字符串的开头)。
4.代码:
@第一步:找到每个字符最后出现的位置,存储在一个数组中。
@第二步:定义两个int类型变量start和end,初值均为0,start用于存储字符串的开头,end用于存储已经遍历到的字符串的最远结尾。每遍历一个字符就更新end的值,当end值恰好是当前遍历的位置时,到了截取字符串的位置,那么截取的长度就是end - start + 1,然后把(end + 1)赋值给start,重复操作即可。
边栏推荐
猜你喜欢

【软件工程之美 - 专栏笔记】27 | 软件工程师的核心竞争力是什么?(上)

LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601

Joiner.on和stream().map联合使用技巧

循环链表和双向链表

传统模型预测控制轨迹跟踪——波浪形轨迹(功能包已经更新)

Based on stc51: schematic diagram and source code of four axis flight control open source project (entry-level DIY)

【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识

Hal library learning notes - 8 use of serial communication

顺序表和链表

CS5340国产替代DP5340多比特音频 A/D 转换器
随机推荐
FPGA based: multi-target motion detection (hand-in-hand teaching ①)
Zero basics FPGA (5): counter of sequential logic circuit design (with introduction to breathing lamp experiment and simple combinational logic design)
兼容cc1101/cmt2300-DP4301 SUB-1G 无线收发芯片
【软件工程之美 - 专栏笔记】25 | 有哪些方法可以提高开发效率?
八大排序-----------------堆排序
STM32 串口乱码
FT232替代GP232RL USB-RS232转换器芯片国产化应用
CV520国产替代Ci521 13.56MHz 非接触式读写器芯片
【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识
噪声传感器工作原理是什么?
JUC并发知识点
Hal library learning notes-12 SPI
#6898 变幻的矩阵 题解
Reading papers on fake news detection (2): semi supervised learning and graph neural networks for fake news detection
寒假集训总结 (1.23~1.28) [第一梯队]
Huawei cloud 14 day Hongmeng device development -day2 compilation framework
关于【链式前向星】的自学理解
NFC双向通讯13.56MHZ非接触式阅读器芯片--Si512替代PN512
基于51单片机的直流电机调速系统(L298的使用)
Based on STM32: couple interactive doll (design scheme + source code +3d drawing +ad circuit)