非独立思考
class Solution {public List<Integer> partitionLabels(String s) {// 首先需要遍历,记录每个字符最后一次出现的下标int[] last = new int[26];for (int i = 0; i < s.length(); i++) {last[s.charAt(i) - 'a'] = i;}// 存放结果List<Integer> res = new ArrayList<>();int start = 0, end = 0;// 重新遍历// 针对每个出现的字符,先得到其最后出现的位置Y// 那么当前片段由于存在这个字符,那么其当前片段的下标一定不会小于Y:end=max(end,Y)// 访问到end时,当前片段结束。因为不管是否更新了新值,end一定时末尾// 当前片段结束,同时将end加入结果集,start = end + 1,继续后面的迭代直到结束。for (int i = 0; i < s.length(); i++) {// 进来肯定先判断当前字符的endint curCharEnd = last[s.charAt(i) - 'a'];end = Math.max(curCharEnd, end);if (i == end) {// 当前结束res.add(end - start + 1);start = end + 1;}}return res;}}
