您的位置:首页 > 其它

LeetCode 20. Valid Parentheses(合法括号序列)

2018-03-18 17:43 441 查看
题目描述:
    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();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C LeetCode Stack