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.
解题思路:先建立一个栈,从左到右遍历每个字符,如果遇到'(','{','['则压入栈内,如果遇到右符号')','}',']'则要与栈顶元素配对,如果匹配则弹出栈顶元素,如果不匹配,则返回错误;如果遇到右符号时栈为空,返回false;遍历结束,如果栈为空,则说明所有符号已经匹配完毕,返回true,否则返回false.(P.S.返回sta.empty()即可)。
class Solution {
public:
bool isValid(string s) {
stack<char> st;
char c;
int i;
for(i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
st.push(s[i]);/*如果是左符号则入栈*/
}
if((s[i]==')')||(s[i]=='}')||(s[i]==']'))
{
if(st.empty())
{
return false;/*遇到右符号前栈为空,即之前没有左符号*/
}
else
{
c=st.top();/*取出栈顶元素*/
st.pop();/*出栈*/
if((s[i]==')'&&c!='(')||(s[i]==']'&&c!='[')||(s[i]=='}'&&c!='{'))
return false;/*失配返回false*/
}
}
}
return st.empty();/*判断是否全部弹出*/
}
};
本文介绍了一种使用栈数据结构来检查字符串中括号是否正确匹配的方法。通过遍历输入字符串,遇到左括号将其压入栈中,遇到右括号则检查是否与栈顶元素匹配并弹出。最后判断栈是否为空以确定括号是否全部正确配对。

874

被折叠的 条评论
为什么被折叠?



