字符串匹配问题(strs)
时间: 2023-12-19 15:04:40 浏览: 113
字符串匹配
字符串匹配问题是指判断一个字符串中的括号是否匹配。括号必须按照特定的顺序进行匹配,从内到外必须是<>、()、[]、{}。例如,输入"[()]",输出为YES,而输入"([])"或"([)]"都应该输出NO。
为了解决这个问题,我们可以使用栈的数据结构来进行处理。遍历字符串中的每一个字符,如果是左括号,则将其入栈;如果是右括号,则判断栈顶的左括号是否与之匹配,如果匹配则将栈顶的左括号出栈,否则返回NO。最后,如果栈为空,则说明所有的括号都匹配成功,返回YES;否则返回NO。
以下是用C++语言实现的示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
bool match(string s) {
stack<char> st;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '<' || s[i] == '(' || s[i] == '[' || s[i] == '{') {
st.push(s[i]);
} else {
if (st.empty()) {
return false;
}
char top = st.top();
st.pop();
if ((s[i] == '>' && top != '<') || (s[i] == ')' && top != '(') || (s[i] == ']' && top != '[') || (s[i] == '}' && top != '{')) {
return false;
}
}
}
return st.empty();
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
cout << (match(s) ? "YES" : "NO") << endl;
}
return 0;
}
```
阅读全文