括号序列(NC52/考察次数Top18/难度简单)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号序列(NC52/考察次数Top18/难度简单)相关的知识,希望对你有一定的参考价值。
描述:
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
示例1
输入:
“[”
返回值:
false
示例2
输入:
“[]”
返回值:
true
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
//思路,可以使用一个栈来解决问题,依次遍历s的各个元素
//保证stack不为空,然后判断后面的元素,配上了弹出,没配上接着push进去,最后判断栈是否为空即可
stack<char> c;
for(int i = 0; i<s.length(); i++)
{
//首先push元素进去,保证stack不为空,然后continue结束此次,判断下一个
if(c.empty()) //判断c是否为空;
{
c.push(s[i]); //push用于stack和queue等;push_back则用于vector;
continue; //c中多一个元素;
}
if(s[i] == ')' && c.top() == '(' ){ //字符串用单引号;c.top()表示栈顶元素
c.pop(); //配对成功,弹,下次遍历会从配对好的下一个元素开始
}else if(s[i] == ']' && c.top() == '[' ){
c.pop();
}else if(s[i] == '}' && c.top() == '{' ){
c.pop();
}else{
c.push(s[i]); //没有配对接着,push进去;
}
}
return c.empty(); //最后判断c是否为空即可
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于括号序列(NC52/考察次数Top18/难度简单)的主要内容,如果未能解决你的问题,请参考以下文章
最长公共子序列-II(NC92/考察次数Top58/难度中等)