9月又是换工作的最佳时机。我幻想着只要换一份工作,就可以离开这个“破碎的地方”,赚更多的钱,做最舒服的事情,但事与愿违。
最近,一名女学生正在换工作。面试前她准备了很多问题。我以为她很有信心,结果却在算法上吃了大亏。
什么样的算法题能让面试官对一个女孩说出这么狠的话:你工作了3年了,这道算法题你都解不出来?
有效括号
这是LeetCode上的一道算法题,旨在考察考生对“栈”数据结构的熟悉程度。我们来看一下。
给定一个仅包含字符‘(‘、‘)’、‘{‘、‘}’、‘[‘和‘]’的字符串 s,确定输入字符串是否有效。
如果满足以下条件,输入字符串有效:开括号必须由相同类型的括号括起来。左括号必须按正确的顺序关闭。
示例1:
Input: s = "()"
Output: true
示例2:
Input: s = "()[]{}"
Output: true
示例3:
Input: s = "(]"
Output: false
示例4:
Input: s = "([)]"
Output: false
实施例5:
Input: s = "{[]}"
Output: true
限制条件:
- 1 {
// The empty string character is valid
if (!s) {
return true
}
const leftToRight = {
'(': ')',
'[': ']',
'{': '}'
}
const stack = []
for (let i = 0, len = s.length; i < len; i++) {
const ch = s[i]
// Left parenthesis
if (leftToRight[ch]) {
stack.push(ch)
} else {
// start matching closing parenthesis
// 1. If there is no left parenthesis in the stack, directly false
// 2. There is data but the top element of the stack is not the current closing parenthesis
if (!stack.length || leftToRight[ stack.pop() ] !== ch) {
return false
}
}
}
// Finally check if the stack is empty
return !stack.length
}虽然暴力方案符合我们的常规思维,但是堆栈结构方案会更加高效。
最后
在面试中,算法是否应该成为评价候选人的重要指标,我们不会抱怨,但近年来,几乎每家公司都将算法纳入了前端面试中。为了拿到自己喜欢的offer,复习数据结构、刷题还是有必要的。