题目
截图自官方
代码
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;
}
int start=0;
int end=0;
List<Integer> res=new ArrayList();
// 不断寻找右边界,直到边界内的全部遍历完,到达右边界。将该长度加入list
for(int i=0;i<S.length();i++){
end=Math.max(last[S.charAt(i)-'a'],end);
if(i==end){
res.add(end-start+1);
start=end+1;
}
}
return res;
}
// public List<Integer> partitionLabels(String S) {
// // 记录每个字母最后出现的位置,换成map也行。效率会变差
// Map<Character,Integer>last=new HashMap();
// for(int i=0;i<S.length();i++){
// last.put(S.charAt(i),i);
// }
// int start=0;
// int end=0;
// List<Integer> res=new ArrayList();
// // 不断寻找右边界,直到边界内的全部遍历完,到达右边界。将该长度加入list
// for(int i=0;i<S.length();i++){
// end=Math.max(last.get(S.charAt(i)),end);
// if(i==end){
// res.add(end-start+1);
// start=end+1;
// }
// }
// return res;
// }
}