中文网站排名,海南中小企业网站建设,wordpress分页条数,电商网站建设计划书题目描述#xff1a;
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段#xff0c;同一字母最多出现在一个片段中。
注意#xff0c;划分结果需要满足#xff1a;将所有划分结果按顺序连接#xff0c;得到的字符串仍然是 s 。
返回一个表示每个字符串片段的…题目描述
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段同一字母最多出现在一个片段中。
注意划分结果需要满足将所有划分结果按顺序连接得到的字符串仍然是 s 。
返回一个表示每个字符串片段的长度的列表。
初始代码
class Solution {public ListInteger partitionLabels(String s) {}
}
示例1 输入s ababcbacadefegdehijhklij
输出[9,7,8]
解释
划分结果为 ababcbaca、defegde、hijhklij 。
每个字母最多出现在一个片段中。
像 ababcbacadefegde, hijhklij 这样的划分是错误的因为划分的片段数较少。 示例2 输入s eccbbbbdec
输出[10] 参考答案
class Solution {public ListInteger partitionLabels(String s) {ListInteger list new ArrayList();// 使用Hash表的唯一值增加增快效率SetCharacter set new HashSet();// 定义双指针int left 0;int right 0;// 记录前一个左指针位置int count 0;while (left s.length()) {// 截取字符串进而继续遍历其中的字符right s.lastIndexOf(s.charAt(left));for (int i left; i right; i) {if (!set.add(s.charAt(i))) {continue;}right Math.max(right, s.lastIndexOf(s.charAt(i)));}// 左指针位移left right 1;list.add(left - count);count left;}return list;}
}