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);
}
};
本文介绍了一种用于生成特殊二进制序列的算法,该算法通过递归和排序来确保序列中1和0交替出现,并尽可能保持序列最大。代码中展示了如何处理边界情况,以及如何构造和排序子串,最终组合成最大的特殊序列。
684

被折叠的 条评论
为什么被折叠?



