记录:算是第一次刷Leetcode,过程充满艰辛,尝试了白板编程,不开IDE下进行。这一题算是比较简单,大致的思路框架读完题就有了,可偏偏在边界条件和非空判断上花费了不少时间,果然很菜鸡,多刷题才能熟练。
!!该代码不是最优解,只在CPP下只超越了13%的大佬,应该是菜鸡的普遍思路,后期再优化,今天做个记录
题目
- https://leetcode-cn.com/problems/valid-parentheses/
思路:
- 构建一个空栈,数组指针指向第一个元素,同时栈压入第一个元素,接着数组指针移动到下一个元素和栈顶的元素比较,若符合有效括号,则将栈顶弹出,数组指针下移。重复上述操作,注意的是边界条件,栈顶弹出要进行非空判断,同时数组下标不要越界。最后判断若栈为空则是有效符号,否则不是。
class Solution { public: bool isValid(string s) { stack<char>tmp; int index = s.size() - 1; if( s.size() > 0 ) { tmp.push( s[ index-- ] ); } while( index >= 0 ) { if( !tmp.empty() && (( s[ index ] =='(' && tmp.top() == ')' ) || ( s[ index ] == '{' && tmp.top() == '}' ) || ( s[ index ] == '[' && tmp.top() == ']' ))) { tmp.pop(); --index; } else{ tmp.push( s[ index ] ); --index; } } if( tmp.empty() ) return true; else return false; } };