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;
	}
};