LeetCode 20. Valid Parentheses(合法括号序列)
2018-03-18 17:43
441 查看
题目描述:
Given a string containing just the characters
The brackets must close in the correct order,
分析:
题意:给定一个只包含
思路:因为圆括号、中括号、花括号存在嵌套的结构,所以我们需要使用stack来处理。构造一个stack,从左到右扫描字符串,总体分为三步走:①遇到字符
假设字符串长度为n,则时间复杂度为O(n)。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool isValid(string s) {
int n = s.length();
// Exceptional Case:
if(n == 0){
return true;
}
if(n & 1){
return false;
}
stack<char> st;
for(int i = 0; i <= n - 1; i++){
if((s[i] == '(') || (s[i] == '[') || (s[i] == '{')){
st.push(s[i]);
}
else if((s[i] == ')') || (s[i] == ']') || (s[i] == '}')){
if(st.empty()){
return false;
}
else{
if(((st.top() == '(') && (s[i] == ')')) || ((st.top() == '[') && (s[i] == ']')) || ((st.top() == '{') && (s[i] == '}'))){
st.pop();
}
else{
return false;
}
}
}
}
return st.empty();
}
};
Given a string containing just the characters
'(',
')',
'{',
'}',
'['and
']', determine if the input string is valid.
The brackets must close in the correct order,
"()"and
"()[]{}"are all valid but
"(]"and
"([)]"are not.
分析:
题意:给定一个只包含
'(',
')',
'{',
'}',
'[',
']'字符串,判断是否合法。
思路:因为圆括号、中括号、花括号存在嵌套的结构,所以我们需要使用stack来处理。构造一个stack,从左到右扫描字符串,总体分为三步走:①遇到字符
'(',
'{',
'['时,直接压入stack中。②遇到
')',
'}',
']'时,与stack栈顶元素进行匹配:如果配对成功,则弹出栈顶元素;否则说明这是一个非法字符串,直接返回false。③最后判断stack是否为空,如果为空,则返回true,否则返回false(可能对应这种情况:
'(',
'(',
'(')。
假设字符串长度为n,则时间复杂度为O(n)。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool isValid(string s) {
int n = s.length();
// Exceptional Case:
if(n == 0){
return true;
}
if(n & 1){
return false;
}
stack<char> st;
for(int i = 0; i <= n - 1; i++){
if((s[i] == '(') || (s[i] == '[') || (s[i] == '{')){
st.push(s[i]);
}
else if((s[i] == ')') || (s[i] == ']') || (s[i] == '}')){
if(st.empty()){
return false;
}
else{
if(((st.top() == '(') && (s[i] == ')')) || ((st.top() == '[') && (s[i] == ']')) || ((st.top() == '{') && (s[i] == '}'))){
st.pop();
}
else{
return false;
}
}
}
}
return st.empty();
}
};
相关文章推荐
- 20.Valid Parentheses&合法括号序列判断
- [LeetCode] 20. Valid Parentheses 合法括号
- leetcode 20 Valid Parentheses 括号匹配
- leetCode 20.Valid Parentheses (有效的括号) 解题思路和方法
- LeetCode 20 Valid Parentheses (括号匹配问题)
- LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- leetcode20 Valid Parentheses 有效的括号
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- Leetcode刷题记——20. Valid Parentheses (有效的括号即括号匹配)
- LeetCode-20-Valid Parentheses(有效的括号)
- LeetCode 20. Valid Parentheses--验证括号是否有效
- leetcode32 Longest Valid Parentheses 最长有效括号序列
- LeetCode 32. Longest Valid Parentheses(最长合法圆括号子序列)
- LeetCodet题解--20. Valid Parentheses(括号匹配问题)
- LeetCode 20. Valid Parentheses(括号校验)
- LeetCode20——Valid Parentheses(括号匹配问题,使用栈的知识)
- leetCode 20.Valid Parentheses (有效的括号) 解题思路和方法
- 20. Valid Parentheses--合法的括号组合(使用stack)
- Leetcode 20 Valid Parentheses 判断括号匹配