Algorithm
lc678_有效的括号字符串
思路
直接递归,把左括号看做+1,然后有括号看做减一,*
就遍历[1, 0, -1]
中的一个值,如果有负数直接
返回false
写了一波贪心递归,但是超时了,主要和题解的差距在于,自己对于中间sum 大于 0的情况一直递归处理,导致超时
而题解直接容忍下大于0的状态,只处理最终的minCount == 0
即可,妙啊
题解不止上面的贪心解法,还有动态规划和堆栈操作
代码
我的代码
79 / 83 个通过测试用例
TLE,超时了
"**************************************************))))))))))))))))))))))))))))))))))))))))))))))))))"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { private: bool m_string_valid; void _checkValidString(int sum, int index, string& s) { if (sum < 0) { return ; } if (index == s.size() - 1) { if (s[index] == ')') { m_string_valid = m_string_valid || sum == 1; } else if (s[index] == '*') { m_string_valid = m_string_valid || sum == 1 || sum == 0; } return ; } if (s[index] == '(') { _checkValidString(sum + 1, index + 1, s); } else if (s[index] == ')') { _checkValidString(sum - 1, index + 1, s); } else if (s[index] == '*') { _checkValidString(sum + 1, index + 1, s); _checkValidString(sum, index + 1, s); _checkValidString(sum - 1, index + 1, s); } } public: bool checkValidString(string s) { m_string_valid = false; _checkValidString(0, 0, s); return m_string_valid; } };
|
题解代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public: bool checkValidString(string s) { int minCount = 0, maxCount = 0; int n = s.size(); for (int i = 0; i < n; i++) { char c = s[i]; if (c == '(') { minCount++; maxCount++; } else if (c == ')') { minCount = max(minCount - 1, 0); maxCount--; if (maxCount < 0) { return false; } } else { minCount = max(minCount - 1, 0); maxCount++; } } return minCount == 0; } };
|
Review
【TED演讲】贫穷不是你的问题
缺乏某项资源的时候,将会无法更好获取这些资源
正如马太效应,富人有足够的本金进行投资变得更富有,而穷人只能不断努力生存,并且不断地被资本家剥削
而且视频中的研究表明,贫穷的时候的智商会比富有的时候降低14点,所以说
在资源受限的计算机上没法做大数据计算
因此,保障性收入应该成为一种权力,让大家都能吃得饱,穿的暖,有学上,能做自己喜欢做的事情
那样的世界才是美好的世界,是我们应该实现的世界
Tips
Git Stash如何帮助您处理多个分支
Share
MobaXterm下载注册使用
要点
- 下载便携版本
- 下载在线生成的注册码文件
- 注册码文件放到便携版本的exe下
- 注册码文件的命名不要修改,或者用的时候修改回生成时的名字
Custom.mxtpro