Code & Func
2019-12-06

第30天,一个月了。

今天的题目是Partition Labels:

这道题的解法如下:

先遍历一次字符串统计字符出现的次数保存在c1上,然后在遍历一次字符串,这次遍历时同样进行统计字符出现次数保存在c2上,并维护一个变量cnum,这个变量cnum表示当前出现过但是未出现完全的字符的种类数。当出现cnum为 0 时,就表示完成了一次划分。代码如下:

1
vector<int> partitionLabels(string S) {
2
vector<int> c1(26, 0);
3
for(int i = 0, size = S.size(); i < size; i++) {
4
c1[S[i] - 'a']++;
5
}
6
7
vector<int> c2(26, 0);
8
vector<int> res;
9
int temp = 1, cnum = 0;
10
11
for(int i = 0, size = S.size(); i < size; i++, temp++) {
12
int index = S[i] - 'a';
13
if (c2[index] == 0) {
14
cnum++;
15
}
6 collapsed lines
16
if (++c2[index]== c1[index] && --cnum == 0) {
17
res.push_back(temp); temp = 0;
18
}
19
}
20
return res;
21
}
上一条动态