贪心,创建26长度的数组存储各个字母最后一次出现的位置
#include <iostream>
#include <string>
#include <vector>
using namespace::std;
using std::cout;
using std::cin;
int max(int a, int b)
{
if(a > b)
{
return a;
}
else
{
return b;
}
}
vector<int> partitionLabels(string s)
{
vector<int> last(26, 0);
int n = s.size();
for (int i=0; i<n; i++)
{
last[s[i]-'a'] = i;
}
vector<int> res;
int start=0, end=0;
for (int i=0; i<n; i++)
{
end = max(end, last[s[i]-'a']);
if (i == end)
{
res.push_back(end-start+1);
start = end+1;
}
}
return res;
}
int main()
{
string s;
cin >> s;
vector<int> res = partitionLabels(s);
std::cout << "[";
for (int i=0; i<res.size()-1; i++)
{
std::cout << res[i] << ", ";
}
std::cout << res[res.size()-1] << "]";
return 0;
}