解题思路:使用栈实现括号匹配
问题描述:
给定一个包含括号字符(小括号 ()、中括号 []、大括号 {})的字符串,请编写一个算法来判断字符串中的括号是否匹配。
解题思路:
使用栈这种数据结构可以很方便地解决括号匹配的问题。我们可以遍历字符串中的每一个字符,当遇到左括号时,将其入栈;当遇到右括号时,判断栈顶的左括号是否与当前右括号匹配,如果匹配则继续遍历,否则说明括号不匹配。
具体实现步骤如下:
1. 创建一个栈来存储左括号。
2. 遍历字符串中的每个字符:
- 如果是左括号,则将其入栈。
- 如果是右括号,则判断栈是否为空:
- 如果栈为空,说明当前右括号没有左括号与之匹配,返回 false。
- 如果栈不为空,并且栈顶的左括号与当前右括号匹配,则将栈顶的左括号出栈。
- 如果栈不为空,但栈顶的左括号与当前右括号不匹配,返回 false。
3. 遍历完字符串后,检查栈是否为空:
- 如果栈为空,说明所有括号都有匹配的对应括号,返回 true。
- 如果栈不为空,说明有左括号没有匹配的右括号,返回 false。
以下是使用C++编写的示例代码:#include <iostream>#include <stack>using namespace std;bool isBracketMatched(string s) { stack<char> brackets; for (int i = 0; i < s.length(); i++) { char ch = s[i]; if (ch == '(' || ch == '[' || ch == '{') { brackets.push(ch); } else if (ch == ')' || ch == ']' || ch == '}') { if (brackets.empty()) { return false; } else if ( (ch == ')' && brackets.top() == '(') || (ch == ']' && brackets.top() == '[') || (ch == '}' && brackets.top() == '{') ) { brackets.pop(); } else { return false; } } } return brackets.empty();}int main() { string s; cout << "请输入含有括号的字符串:"; cin >> s; if (isBracketMatched(s)) { cout << "括号匹配" << endl; } else { cout << "括号不匹配" << endl; } return 0;}
通过以上算法,我们可以判断一个字符串中的括号是否匹配。希望以上解答能够帮助到你。如果你有任何疑问,请随时追问。
球一个最佳答案谢谢啦!这对我非常重要! |