思路:贪心
其实这个题目并不难,只需要分析出来每一个字母最后出现的坐标就行。
我们根据字母最后出现的坐标数来判断最后划分的字符串。
比如说,字符串前面有abc,这三个字母最后出现的地方就是这个位置,那么我们直接划分就行;但是如果说其中一个字母的最后坐标在远处,我们就需要以这个最远的坐标为主划分字符串。
所以,在我们遍历的时候,需要每遍历一次字符串,就需要更新一次最远坐标。
这里用了双指针的做法进行解答。
class Solution {public List<Integer> partitionLabels(String s) {List<Integer>list=new ArrayList<>();Map<Character,Integer>m=new HashMap<>();if(s.length()==0)return list;for(int i=s.length()-1;i>=0;i--){m.put(s.charAt(i),m.getOrDefault(s.charAt(i),i));}int l=0;int r=0;int index=m.get(s.charAt(l));while(r<s.length()){if(r<s.length()-1&&r==index){list.add(r-l+1);l=r+1;r=l;}else{r++;}if(r<s.length())index=Math.max(index,m.get(s.charAt(r)));}list.add(r-l);return list;}
}