后续可刷 树上滑窗 树上差分
树的建模 天然log递归砍半处理
dfs抽象建图后 滑窗 差分 对于跑图时间复杂度的思考
lc761
特殊二进制串拼接最大字典序
++把字符串按合法1-0平衡段拆分,每段递归处理内部后降序排序再拼接++,就是最大字典序结果
class Solution {
public:
string makeLargestSpecial(string s) {
if (s.size() <= 2) {
return s;
}
// 把 s 划分成若干段合法括号字符串,记录在 substrings 中
vector<string> substrings;
int diff = 0; // 左括号个数 - 右括号个数
int start = 0; // 子串开始下标
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') { // 左括号
diff++;
} else if (--diff == 0) { // 右括号
// 子串 [start, i] 是合法括号字符串,且无法继续划分
// 这意味着子串 [start, i] 只能是嵌套的括号,那么去掉外层的括号,递归解决 [start+1, i-1]
substrings.push_back("1" + makeLargestSpecial(s.substr(start + 1, i - start - 1)) + "0");
start = i + 1; // 下一个子串从 i+1 开始
}
}
ranges::sort(substrings, greater());
auto joined = substrings | views::join;
return string(joined.begin(), joined.end());
}
};