力扣面试题12:有效的括号(栈与队列)

今天刷到一道非常经典的题目,就是给定一个括号字符串,要你找出相匹配的括号字符串,如果括号多了或者少了或者不匹配,就返回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;
}

今天的算法题就分享到这里,这是一道非常经典的题目,点个赞再走吧!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值