题目链接:
https://leetcode-cn.com/problems/valid-parentheses/description/
题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
思路:
原本是想先判断括号的数量是否契合,然后利用替换的方法来进行,但太麻烦最后选择放弃(主要还是懒),于是参考了一下别人的代码,发现栈的思想非常重要,简直是算这种题目的利器。
栈的应用:
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;
}
};
总结:
虽然这是个简单题目,但是这提醒了我注意栈类的应用,之前也有了解栈类,但一时忘了这方面的应用,需要多了解这方面的知识,然后加强应用,毕竟这是一个大的方面,熟悉了,也算是算法上的小进阶。另外就是自己考虑细节是时候还是会不够缜密,要精神充沛,不要偷懒。。。。。。。