leetcode20.有效的括号(简单)
https://blog.csdn.net/zhangjiaji111/article/details/120883982
leetcode22.括号生成(中等)
https://blog.csdn.net/zhangjiaji111/article/details/121915906
leetcode32.最长有效括号(困难)
https://blog.csdn.net/zhangjiaji111/article/details/120882561
leetcode301.删除无效的括号(困难)
https://blog.csdn.net/zhangjiaji111/article/details/122131839
leetcode921.使括号有效的最少添加(中等)
https://blog.csdn.net/zhangjiaji111/article/details/123920880
1.判断括号序列是否符合规范(栈也可以)
bool judge(string s) {
int l = 0, r = 0, n = s.size();
if (n & 1) return false; //如果括号序列中有字母就不能用这句了
for (auto& each : s) {
if (each == '(') l++;
if (each == ')') r++;
if (r > l || l > n / 2) return false;
}
return l == r;
}
括号符合规范:过程中左括号大于等于右括号 且 最后左括号数目==右括号数目
剪枝:
开始阶段:个数为奇数
过程阶段(l r累加):(1)l大于n/2 (2)r大于l
过程阶段(+1 -1):(1)剩余的个数<val,表示后面全是右括号都不匹配 (2)val小于0
2.判断括号序列是否规范(指规范的前面部分)
bool judge(string& tmp, int n) { //构造长度为2*n的规范序列
int l = 0, r = 0;
for (auto& each : tmp) {
if (each == '(') l++;
if (each == ')') r++;
if (r > l || l > n) return false;
}
return true; //左括号大于右括号的话也要返回true,因为还没构造完全,不能返回false,比如((())
}
版权声明:本文为zhangjiaji111原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。