有效的括号
有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路
利用 栈 的特点,先进后出
遍历字符串,遇到左括号就入栈右括号,若与栈元素相同则出栈
- 第一种情况:栈为空,说明有多余括号
- 第二种情况:栈的元素和字符串元素不匹配
- 第三种情况:遍历完字符串后栈不为空,说明有左括号没有右括号可匹配
Python中没有栈,可用List代替。
def isValid(self, s):
# 栈
# 遍历到 左括号入栈右括号
stack = []
for item in s:
if item == '(':
stack.append(')')
elif item == '{':
stack.append('}')
elif item == '[':
stack.append(']')
# 情况1.若 栈为空 ,说明有多余括号
# 情况2.若 栈头部元素和遍历的元素不匹配
elif not stack or item!=stack[-1]:
return False
# 若 相等就出栈
else:
stack.pop()
#情况3.若 匹配完毕后栈不为空,说明有左括号没有右括号来匹配,返回False
return True if not stack else False
C++可用STL的stack
bool isValid(string s) {
stack<char> st;
for(int i = 0;i < s.size() ; i++)
{
if(s[i] == '[')
st.push(']');
else if(s[i] == '{')
st.push('}');
else if(s[i] == '(')
st.push(')');
else if(st.empty() || st.top() != s[i])
return false;
else
st.pop();
}
return st.empty() ? true:false;
}