问题描述: 输入一行括号 只包括’(’ ‘)’ ‘{’ ‘}’ ‘[’ ‘]’ 如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No。
#include <iostream>
#include <stack>
using namespace std;
char change(char i)
{
if(i == ')')
return '(';
if(i == '}')
return '{';
if(i == ']')
return '[';
return '0';
}
int main()
{
stack<char> s;
char str[100] = {0},t;
int i;
cin >> str;
for(i=0; str[i] != 0; i++)
{
switch(str[i])
{
case '(':
case '[':
case '{':
s.push(str[i]);
break;
case ')':
case ']':
case '}':
{
if(s.empty())
{
cout << "no";
return 0;
}
else
{
t = change(str[i]);
if(s.top() == t)
{
s.pop();
break;
}
else
{
cout << "no";
return 0;
}
}
}
}
}
if(s.empty())
{
cout << "yes";
return 0;
}
else
{
cout << "no";
return 0;
}
return 0;
}
上面是大一刚学stack时写的代码
做LeetCode又遇到了这个题,把之前的代码改的简洁了一些,思路没什么变化
bool isValid(string s)
{
stack<char> parentheses;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
parentheses.push(s[i]);
else
{
if(parentheses.empty())
return false;
if(s[i] == ')' && parentheses.top() != '(')
return false;
if(s[i] == ']' && parentheses.top() != '[')
return false;
if(s[i] == '}' && parentheses.top() != '{')
return false;
parentheses.pop();
}
}
return parentheses.empty();
}