Algorithm
本周的算法题为 20. 有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "(]"
输出:false
实现代码如下:
var isValid = function(str) {
if (str.length % 2 !== 0) {
return false
}
const map = {
'(': ')',
'[': ']',
'{': '}'
}
let stack = []
for (let i = 0; i < str.length; i++) {
const s = str[i]
if (s == '(' || s == '[' || s == '{') {
stack.push(s)
} else {
if (s !== map[stack.pop()]) {
return false
}
}
}
return stack.length == 0
};
解题思路:
- 总的来说,就是通过栈后进先出(LIFO ,Last In First Out)的机制实现。
- 如果字符串长度不是偶数,则说明不是成对的,可直接返回
false
- 通过
Map
,创建一个对象,用来处理左右括号映射关系 - 创建一个数组
stack
,用来实现栈的操作 - 如果是左括号,则入栈
stack.push(s)
- 如果是右括号,
stack.pop()
栈顶的左括号出栈,获取它映射的右括号,进行比较 - 如果不相等,直接返回
false
。 - 当
stack
长度为空,说明入栈的左括号都找到了对应的右括号,返回true
,否则为false
。
Review
Argentina’s president warns of economic ‘shock treatment’
阿根廷有了一位新总统。他叫哈维尔·米莱。他出人意料地赢得了11月的选举。米莱承诺要扭转阿根廷糟糕的经济。他特别表示,他将降低目前在140%左右的通胀率。他还希望大幅削减公共债务。在过去的几十年里,阿根廷借了很多钱。米莱开始想偿还这笔钱。在他作为总统的第一次演讲中,他说经济需要“休克疗法”来恢复。他表示,前几届政府花费太多,“没有钱了”。他警告阿根廷人,未来几年的生活将会很艰难。他说,人们将不得不生活在“紧缩”中以帮助经济。
哈维尔·米莱与阿根廷以前见过的任何政治家都不同。他是一个极右翼政治家。许多人说他很像美国前总统川普和巴西前总统博索纳罗。在米莱竞选期间,人们经常看到他拿着电锯。他想让人们知道,他将在经济方面大幅削减开支。他称自己的选举胜利是阿根廷历史的转折点,就像1989年柏林墙的倒塌一样。他承诺限制堕胎权并放宽枪支法。他也因为不相信气候变化而惹恼了环保人士。他说:“我们知道,短期内形势将会恶化,但之后我们将看到我们努力的成果。”
Tip
栈是一种后进先出(LIFO)的数据结构,**类似于我们在现实生活中处理堆叠的物体的方式。**栈的主要操作包括将元素压入栈(push),从栈中弹出元素(pop),和查看栈顶元素(peek)。
Share
最近观察,所见所闻,想到《铁齿铜牙纪晓岚》中和珅演的王刚对纪晓岚说的“清官的确令人敬佩,可清官也令人畏啊。”清官易苛,苛则寡恩,仗着自己平时廉洁,以自己为标准,可以毫无顾忌对他人横加指责。以之对应的则是在工作中,在团队管理上,仗着自己为了团队兢兢业业,没有任何私心,所作所为完全经得起推敲,就开始眼里容不得沙子了,好像谁都不如自己用心一样,那么简单的事情怎么还做不好呢?水至清则无鱼,谁身上没有点问题呢,想想自己的缺点,想想别人的长处,会容得下世界上很多事情。有时候说还不如不说,做还不如不做,完全是以你想要的结果为准,只要结果是达到预期的,不管什么方式都是可以的,尊重,理解,保持平和的心态。