当前位置:网站首页>有效的括号字符串[贪心练习]
有效的括号字符串[贪心练习]
2022-07-30 17:00:00 【REN_林森】
前言
贪心最考察分析能力,且训练变通能力,往往不和经典的死知识点挂钩,而是寻找贪心点,再用代码把自己的想法实现。所以不能发呆,需稳步快想!
一、有效的括号字符串

二、寻找贪心点
package everyday.greed;
// 有效的括号字符串。
public class CheckValidString {
/* target:不要发呆!稳步快想。 采用一般的栈思想来括号匹配,碰到*号怎么办? 用数组+len实现栈,当碰到 ')' 时,取把 ‘*’ 号前面 ‘(' 变为 ’*‘ ,为什么这样做? 试想一下,此时的 ’*‘ 可变 ’)‘ ,也可变 '(' ,也可当作 空串,是局部信息不能做出正确判定的时候! 如果缺'(',留住*号后面让它变;如果缺右,留着*号后面让它变。空串同理。 贪心核心:把*留到最后,防止前期用错了,毕竟它是万能的,可左右不万能,先让固定括号匹配去对消左右括号。 */
public boolean checkValidString(String s) {
int[] sk = new int[100];
int len = 0;
for (char c : s.toCharArray()) {
if (c == '(') sk[len++] = 1;
if (c == '*') sk[len++] = 0;
if (c == ')') {
if (len == 0) return false;
// 寻找前面的 ’(‘ 号
int i = len - 1;
while (i >= 0 && sk[i] != 1) --i;
if (i >= 0) sk[i] = 0;// 将左括号变星号。
len--;
}
}
// 拿到全局信息,可以来做正确的判定了。
// 看看后面的 星号 是否能足够填充前面的 左括号。
int m = 0;// 代表后面星号的个数。注:这里其实有以前练习的抽象思想,我们不关心这一个个号,我们关心这一组符号有多少,将数量m抽象出来。
for (int i = len - 1; i >= 0; i--) {
if (sk[i] == 1 && m == 0) return false;
if (sk[i] == 0) ++m;
else --m;
}
return true;
}
}
总结
1)练习贪心问题,可锻炼分析能力,数据结构巧妙运用能力。
2)不要发呆,稳步快想!
3)训练抽象能力,否则不能巧妙的将现实问题转化为代码,或者说很难转换。转换问题(配合数据结构&算法&循环分支&抽象能力)是解决问题的大方向之一,还有一类就是复杂性比较高,需要有拆解问题的能力,再联系相关知识点进行组合。
4)总的来说,就是抽象派 & 复杂组件派,对应抽象能力 & 知识点组合协调能力。
参考文献
边栏推荐
猜你喜欢

Wanhua chemical fine chemical industry innovation product assembly

LeetCode318:单词长度的最大乘积

Daily practice------Generate 13-digit bar, Ean-13 code rule: The thirteenth digit is the check code obtained by the calculation of the first twelve digits.

04、Activity的基本使用

LeetCode167: Sum of two numbers in sorted array
![[HarekazeCTF2019]Avatar Uploader 1](/img/2c/6dde7b8d34ba0deb334b4283e1e30e.png)
[HarekazeCTF2019]Avatar Uploader 1

【综合类型第 34 篇】喜讯!喜讯!!喜讯!!!,我在 CSDN 的第一个实体铭牌

.NET 6.0中使用Identity框架实现JWT身份认证与授权
![(17)[系统调用]追踪系统调用(0环)](/img/d4/aa48745ac918ebfc45c07b587fa86f.png)
(17)[系统调用]追踪系统调用(0环)

FP6600QSO SOP-8 USB专用充电端口控制器 用于快充电协议和QC2.0/3.0
随机推荐
哎,这要人老命的缓存一致问题啊
SocialFi 何以成就 Web3 去中心化社交未来
每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
Leetcode 118. Yanghui Triangle
torch.optim.Adam() function usage
华为云数据治理生产线DataArts,让“数据'慧'说话”
初识二叉搜索树
MySql统计函数COUNT详解
牛客网刷题——运算符问题
大厂面试官眼中的好简历到底长啥样
华为云数据治理生产线DataArts,让“数据‘慧’说话”
第一次用debug查询,发现这个为空,是不是代表还没获得数据库的意思?求帮助。
Dive deep on Netflix‘s recommender system(Netflix推荐系统是如何实现的?)
KDD‘21推荐系统离散特征表征无embedding table Learning to Embed Categorical Features without Embedding Tables for
HUAWEI CLOUD data governance production line DataArts, let "data 'wisdom' speak"
What does a good resume look like in the eyes of a big factory interviewer?
微信小程序picker滚动选择器使用详解
Navisworks切换语言
(18)[系统调用]追踪系统调用(服务表)
mysql进制安装与mysql密码破解