有一点点思路觉得应该记录每个字母出现的最后位置,但是仅仅只是想到这,就不知道接下来该怎么办了。。
去看了一下别人的思路,觉得。。嗯。。有道理。。
很重要的一句话!!!!!i 与 end相同 ,说明该范围内的都在这里面了!!!
class Solution {
public List<Integer> partitionLabels(String S) {
List res = new ArrayList();
int[] last = new int[ 26 ];
int siz = S.length();
for( int i = 0 ; i < siz ; i ++ ){
last[ S.charAt( i ) - 'a' ] = i ;
}
int start = -1 ;
int end = 0 ;
for( int i = 0 ; i < siz ; i ++ ){
end = last[ S.charAt( i ) - 'a' ] > end ? last[ S.charAt( i ) - 'a' ] : end;
if( end == i ){
res.add( end - start );
start = end;
}
}
return res;
}
}
不过即使弄明白了思路,也是一波三折,因为对JAVA语法不是很熟悉
1.声明整型数组:与c++不同
2不能直接S[ i ]这样来访问某一个字符,而要用字符串类的函数charAt( i )来访问
.
3.我觉得list.add()函数是很神奇的一个函数,好吧一开始是我理解错了,就只是单纯的把数量放进去