今天刷到一道非常经典的题目,就是给定一个括号字符串,要你找出相匹配的括号字符串,如果括号多了或者少了或者不匹配,就返回false,否者返回true,这里直接给出一个实例会比较好理解一点:
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
- 输入: "()"
- 输出: true
示例 2:
- 输入: "()[]{}"
- 输出: true
示例 3:
- 输入: "(]"
- 输出: false
- 其实道题目总共分为三种情况,第一:如果左括号多了就返回false;第二,如果右括号多了,就返回false,如果将这个字符串遍历完了,栈里面的元素不为空的话,就说明有多的括号,当然这里先讲一下整体思路:
首先遍历这个括号字符串,如果遇到左括号,就将这个括号对应的右括号放进栈里面,当然首先需要定义一个栈,当我们遍历完左括号后,再寻找右括号,如果找的右括号与栈里面的括号不匹配的话,就说明里面的括号多了或者少了就返回false;如果遍历完了之后,栈里面的元素不为空的话,说明原来的字符串多了括号;下面给出代码,方便同学们理解:
//有效的括号
bool FindString(string s) {
stack<char>StackString;//定义一个栈
if (StackString.size() % 2 != 0)return false;//当然,如果栈的元素为奇数的话,说明肯定多了或者少了括号
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(')StackString.push(')');
else if (s[i] == '{')StackString.push('}');
else if (s[i] == '[')StackString.push(']');
else if (StackString.empty() || StackString.top() != s[i])return false;//将右括号与栈里面的元素进行对比,如果没有找到,说明少了括号;
else return true;
StackString.pop();//移除栈顶元素
}
if (StackString.empty())return false;
return true;
}
今天的算法题就分享到这里,这是一道非常经典的题目,点个赞再走吧!