记录每日LeetCode 763.划分字母区间 Java实现
2023-12-13 05:32:00
题目描述:
给你一个字符串 s
。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s
。
返回一个表示每个字符串片段的长度的列表。
初始代码:
class Solution {
public List<Integer> partitionLabels(String s) {
}
}
示例1:
输入:s = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
示例2:
输入:s = "eccbbbbdec" 输出:[10]
参考答案:
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> list = new ArrayList<>();
// 使用Hash表的唯一值增加增快效率
Set<Character> 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;
}
}
文章来源:https://blog.csdn.net/m0_65563175/article/details/134876524
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!