题目描述
输入一个由()[]四种符号构成的字符串。判断其中的括号是否匹配,是,就输出yes,否则输出no。
比如:输入([])、([()])、[((()))]、()[][][]()[]这几个字符串(双引号内部的内容),我们都算是匹配的。
再比如:输入([)、([)]、([(]))这几个字符串,我们都认为是不匹配的。
输入
一个由()[]四种符号构成的字符串,字符串长度不超过 100。
输出
如果匹配,请输出yes,如果不匹配,请输出no。
样例
输入
([])
输出
yes
代码1
#include <iostream>
#include <stack>
using namespace std;
bool isMatching(string str) {
stack<char> st;
for (char c : str) {
if (c == '(' || c == '[') {
st.push(c);
} else if (!st.empty() && ((c == ')' && st.top() == '(') || (c == ']' && st.top() == '['))) {
st.pop();
} else {
return false;
}
}
return st.empty(); // 栈为空表示所有括号都匹配成功
}
int main() {
string str;
cout << "请输入由括号构成的字符串:" << endl;
cin >> str;
if (isMatching(str)) {
cout << "yes" << endl;
} else {
cout << "no" << endl;
}
return 0;
}
代码2
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool isMatching(string str) {
stack<char> brackets;
for (char c : str) {
if (c == '(' || c == '[') {
brackets.push(c);
} else if (c == ')' || c == ']') {
if (brackets.empty()) {
return false; // 出现右括号,但栈为空,不匹配
}
char top = brackets.top();
brackets.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[')) {
return false; // 出现右括号,但与栈顶的左括号不匹配
}
}
}
return brackets.empty(); // 所有的左括号都被匹配完毕
}
int main() {
string str;
cout << "请输入由括号构成的字符串:" << endl;
cin >> str;
if (isMatching(str)) {
cout << "yes" << endl;
} else {
cout << "no" << endl;
}
return 0;
}