股市是企业融资的重要方法之一,股市的波动不仅会影响股民的钱包,也会影响企业的融资效率进而影响到企业的扩张和招聘人数。
虽然前两天大 A 突然暴涨,但是我还是没有入场。虽然我没有入场躲过了很多股票飙绿,但是没有躲过越来越难的秋招并挂在了腾讯二面。
今天带来在腾讯面试中出现过的题目:
题目描述:
题号:20
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
-
左括号必须用相同类型的右括号闭合。
-
左括号必须以正确的顺序闭合。
-
每个右括号都有一个对应的相同类型的左括号。
解题思路:
思路一:辅助栈
可以使用栈这种数据结构。遍历字符串中的每个字符,当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否为对应的左括号,如果是则弹出栈顶元素,否则返回false。最后,检查栈是否为空,如果为空则说明所有括号都正确匹配,返回true;否则,返回false。
时间复杂度:O(n)
空间复杂度:O(n)
C++
// C++
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
unordered_map<char, char> pairs = {
{')', '('},
{'}', '{'},
{']', '['}
};
for (char ch : s) {
if (pairs.find(ch) == pairs.end()) {
stk.push(ch);
} else {
if (stk.empty() || stk.top() != pairs[ch]) {
return false;
}
stk.pop();
}
}
return stk.empty();
}
};
go
// go
func isValid(s string) bool {
stack := []rune{}
pairs := map[rune]rune{
')': '(',
'}': '{',
']': '[',
}
for _, char := range s {
if _, ok := pairs[char]; !ok {
stack = append(stack, char)
} else {
if len(stack) == 0 || stack[len(stack)-1] != pairs[char] {
return false
}
stack = stack[:len(stack)-1]
}
}
return len(stack) == 0
}