2026/1/10 12:21:11
网站建设
项目流程
网站开发工程师应聘书范文700字,找工地项目承包网站,cent wordpress阿里云,网站文字模板题目
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段#xff0c;同一字母最多出现在一个片段中。例如#xff0c;字符串 “ababcc” 能够被分为 [“abab”, “cc”]#xff0c;但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。
注意…题目给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段同一字母最多出现在一个片段中。例如字符串 “ababcc” 能够被分为 [“abab”, “cc”]但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。注意划分结果需要满足将所有划分结果按顺序连接得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。示例 1输入s “ababcbacadefegdehijhklij”输出[9,7,8]解释划分结果为 “ababcbaca”、“defegde”、“hijhklij” 。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的因为划分的片段数较少。示例 2输入s “eccbbbbdec”输出[10]题解classSolution{publicListIntegerpartitionLabels(StringS){char[]sS.toCharArray();intns.length;int[]lastnewint[26];for(inti0;in;i){last[s[i]-a]i;// 每个字母最后出现的下标}ListIntegeransnewArrayList();intstart0,end0;for(inti0;in;i){endMath.max(end,last[s[i]-a]);// 更新当前区间右端点的最大值if(endi){// 当前区间合并完毕ans.add(end-start1);// 区间长度加入答案starti1;// 下一个区间的左端点}}returnans;}}解析出自本质是合并区间简洁写法Python/Java/C/C/Go/JS/RustclassSolution{//定义一个新的解决方案类publicListIntegerpartitionLabels(StringS){//partitionLabels是接收字符串S的方法char[]sS.toCharArray();//将输入的字符串转换为字符数组sintns.length;//获取字符串的长度n并保存到变量中int[]lastnewint[26];//初始化一个大小为26的整型数组表示英文字母表中的每个字母的索引。这个将用于获取最后出现的下标值for(inti0;in;i){//循环遍历整个s数组last[s[i]-a]i;//每次迭代时更新字符在输入字符串中的索引位置。这里通过计算字母在英文字母表中的索引值来实现。比如在最后出现了d字符就找到了它的最远索引}ListIntegeransnewArrayList();//初始化一个空的数组列表以存储最终答案intstart0,end0;//定义变量start和end为区间的起点和终点。这两个点表示可能包含最多不重复字母的子串/区间即我们要找的划分/区间for(inti0;in;i){//再次从头开始循环遍历整个s数组。这个循环用于确定每个可能区间的结束点endMath.max(end,last[s[i]-a]);//当前字母/字符的最后出现的位置和已经迄今为止找到的最远位置比如d在这里表示一个子串中的最大索引它将一直增加直到达到所有部分或数组末尾if(endi){//如果当前确定的区间从start到end之间包括这两个点结束的位置等于当前迭代器i表示的字符意味着没有重复/公共字母存在。因为在给定子串中只有这个部分包含所有唯一字母ans.add(end-start1);//将长度加入答案列表end-start1因为在Java中数组索引从0开始starti1;//移动到下一个区间的起点。i 1确保我们向前移动一步到达下一个字母/字符的位置并成为新的区间或子串的起始点}}