文章目录
1. 题目
2. 思路
(1) 贪心算法
- 要尽可能多的划分区间,就要尽可能使区间内包含的字母更少,因此,需要获取每一个字母最后出现的位置。
- 从前往后遍历,获取当前区间的最近结尾,若当前下标为当前区间的最近结尾,则将当前区间加入结果集。
3. 代码
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public List partitionLabels(String s) {
int n = s.length();
int[] end = new int[26];
for (int i = 0; i < n; i++) {
end[s.charAt(i) - 'a'] = i;
}
List res = new ArrayList<>();
int left = 0;
int right = 0;
for (int i = 0; i < n; i++) {
right = Math.max(right, end[s.charAt(i) - 'a']);
if (i == right) {
res.add(right - left + 1);
left = right + 1;
}
}
return res;
}
}