20. 有效的括号的简单想法

题目链接:

https://leetcode-cn.com/problems/valid-parentheses/description/

题目描述:

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

思路:

原本是想先判断括号的数量是否契合,然后利用替换的方法来进行,但太麻烦最后选择放弃(主要还是懒),于是参考了一下别人的代码,发现栈的思想非常重要,简直是算这种题目的利器。

栈的应用:

stack<char> cs;
cs.push(c);
cs.empty();
cs.top();
cs.pop();

 注意一下细节,不要怕代码长度太长,主要是有思路能简化就好。

源代码:

class Solution {
public:
    bool isValid(string s) {
	stack<char> cs;
	char c;
    int i=0;
	while (i<s.length())
	{
		c = s[i];
		if (c == '(' || c == '[' || c == '{')
		{
			cs.push(c);
		}
		else
		{
			if (cs.empty()) return false;
            if(c==')') {
               if(cs.top()!='(')
                return false;
            }
            if(c==']'){
               if(cs.top()!='[')
                return false;
            }
            if(c=='}') {
               if(cs.top()!='{')
                return false;
            }
			cs.pop();
		}
		++i;
	}
	if (!cs.empty())
	{
		return false;
	}
	return true;
}
};

总结:

虽然这是个简单题目,但是这提醒了我注意栈类的应用,之前也有了解栈类,但一时忘了这方面的应用,需要多了解这方面的知识,然后加强应用,毕竟这是一个大的方面,熟悉了,也算是算法上的小进阶。另外就是自己考虑细节是时候还是会不够缜密,要精神充沛,不要偷懒。。。。。。。

猜你喜欢

转载自blog.csdn.net/thunderforrain/article/details/81198270