贪心算法都很巧妙先创建数组存储每个字母最后出现的位置定义left代表分割后的每个字符串的起始位置right代表该字符串的结束位置不过right会在遍历过程中更新直到取得最终值class Solution { public ListInteger partitionLabels(String s) { char[] ch s.toCharArray(); int[] zm new int[26]; for(int i 0;i ch.length;i){ zm[ch[i] - a] i; } int left 0; int right 0; ListInteger res new ArrayList(); for(int i 0;i ch.length;i){ right Math.max(right,zm[ch[i] - a]); if(i right){ res.add(right - left 1); left i 1; } } return res; } }