合法括号字符串|递归|树

后续可刷 树上滑窗 树上差分

树的建模 天然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());

}

};

相关推荐
普通网友1 小时前
C++与Rust交互编程
开发语言·c++·算法
逆境不可逃2 小时前
【春节篇】LeetCode 热题 100 之 238.除了自身以外数组的乘积
数据结构·算法·leetcode
铸人2 小时前
再论自然数全加和 - 质数螺旋及其生成程序
数学·算法·数论·复数
散峰而望2 小时前
【算法竞赛】堆和 priority_queue
开发语言·数据结构·c++·算法·贪心算法·动态规划·推荐算法
WarPigs2 小时前
UI显示任务目的地标记的方法
算法·ui
蚊子码农2 小时前
算法题解记录-560和为k的子数组
算法
alexwang2112 小时前
B2007 A + B 问题 题解
c++·算法·题解·洛谷
重生之后端学习2 小时前
46. 全排列
数据结构·算法·职场和发展·深度优先·图论
wostcdk3 小时前
数论学习1
数据结构·学习·算法