761. 特殊的二进制序列
代码实现(部分看题解)
class Solution {
public:
string makeLargestSpecial(string s) {
if (s.size() <= 2) return s;
int left = 0, cnt = 0;
vector<string> subs;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') {
cnt++;
}
else {
cnt--;
if (!cnt) {
// 获得1 + 从left + 1,长为i - left - 1 + 0的子串
subs.push_back("1" +
makeLargestSpecial(s.substr(left + 1, i -left - 1))
+ "0");
left = i + 1;
}
}
}
sort(subs.begin(), subs.end(), greater<string>());
return accumulate(subs.begin(), subs.end(), ""s);
}
};