采用的方法是贪心,为了理解在每句话基本都加了注释。
以下是代码:
int* partitionLabels(char * s, int* returnSize){
//数组长度
int len = strlen(s);
//26个字母
int last[26];
//得到当前字母的最后一次出现的下标位置
for(int i = 0; i < len; i++){
last[s[i] - 'a'] = i;
}
//新指针
int* partition = malloc(sizeof(int) * len);
//数组下标
int start = 0, end = 0;
//初始化
*returnSize = 0;
//循环遍历,判断当前数组中有没有重复的。
for(int i = 0; i < len; i++){
//判断结束节点
end = fmax(end, last[s[i] - 'a']);
//片段结束,切分
if (i == end){
partition[(*returnSize)++] = end - start + 1;
start = end + 1;
}
}
return partition;
}
执行用时
主要是为了逐渐弄懂代码,算法题目前写了几十个,不少都是自己写完发现有很大错误,然后照着题解一边写一边分析,现在打算将分析逐渐记录下来,并与大家分享,大家也可以在评论区提出错误。