std::vector<int> Algorithm::partitionLabels(string S)
{
std::vector<int> vecMins;
std::vector<int> vecMaxs;
bool arrayBFirst[26];
for (int i = 0; i < 26; i++)
{
arrayBFirst[i] = true;
}
int nLen = S.length();
for (int i = 0; i < nLen; i++)
{
char ch = S[i];
int idx = ch - 'a';
if (idx >= 26)
{
continue;
}
if (arrayBFirst[idx])
{
int iMin = i;
int iMax = i;
for (int j = 0; j < nLen; j++)
{
char chN = S[j];
if (ch == chN)
{
iMax = j;
}
}
vecMins.push_back(iMin);
vecMaxs.push_back(iMax);
}
}
nLen = vecMins.size();
for (int i = 0; i < nLen; i++)
{
for (int j = i + 1; j < nLen; j++)
{
if (vecMaxs[i] < vecMins[j] || vecMaxs[j] < vecMins[i])
continue;
vecMins[i] = (vecMins[i] > vecMins[j]) ? vecMins[j] : vecMins[i];
vecMaxs[i] = (vecMaxs[i] > vecMaxs[j]) ? vecMaxs[i] : vecMaxs[j];
vecMins[j] = 500;
vecMaxs[j] = -1;
}
}
vector<int> vecPartion;
for (int i = 0; i < nLen; i++)
{
int iS = vecMins[i];
int iE = vecMaxs[i];
if (iS != 500 && iE != -1)
{
vecPartion.push_back(iE - iS + 1);
}
}
return vecPartion;
}
这个算法一开始没有正确理解题意,导致重写了2次,就目前的解法来看效率也不是很好