- tags: String,LeetCode101,Hash Set,Hash Table,Stack
The key idea is similar to LeetCode101: 316. Remove Duplicate Letters, we use a HashMap to track how many letters which is same in the string. Then we use a HashSet to store appeared letters. When there is no more letters appeared in the HashSet, it’s time to partition.
class Solution {
public:
vector<int> partitionLabels(string s) {
unordered_map<char, int> cntOfLetters;
unordered_set<char> appearedLetters;
vector<int> r;
int count = 0;
for (auto iter = s.begin(); iter != s.end(); ++iter) {
cntOfLetters[*iter]++;
}
for (auto iter = s.begin(); iter != s.end(); ++iter) {
appearedLetters.insert(*iter);
cntOfLetters[*iter]--;
count++;
// Append current count to result if there is no appeared letters
// behind.
bool behind = false;
for (auto si = appearedLetters.begin(); si != appearedLetters.end(); ++si) {
if (cntOfLetters[*si]){
behind = true;
break;
}
}
if (!behind) {
r.push_back(count);
count = 0;
}
}
if (count > 1) {
r.push_back(count);
}
return r;
}
};