棋子

导航

valid parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
 
思路分析:
首先遍历字符串,
如果是左括号(3种)则入栈,
否则(说明是右括号),首先判定栈是否已空,
          若空(说明当前的右括号不会有左括号与之匹配),返回false,
          否则,出栈,并且将这一元素与当前正在遍历的元素进行匹配,若是不匹配则返回false(无效的括号字符集),否则遍历继续进行。
遍历完括号字符串之后,若是,栈为空,返回true
否则返回false,程序结束!
 
代码如下:
 1 #include<iostream>
 2 #include<stack>
 3 #include<vector>
 4 using namespace std;
 5 
 6 class Solution {
 7 private:
 8     stack<char> sta;
 9 public:
10     bool isValid(string s) {
11         int len = s.length();
12         for (int i = 0; i < len; ++i)
13         {
14             if (s[i] == '(' || s[i] == '[' || s[i] == '{')
15                 sta.push(s[i]);
16             else
17             {
18                 if (sta.empty())//这个地方不先判空,则遇到()] 这种情况,程序就直接崩溃了,因为对一个空栈top,你懂的
19                     return false;
20                 char temp = sta.top();
21                 sta.pop();
22                 if (temp=='('&&s[i]==')'||temp=='['&&s[i]==']'||temp=='{'&&s[i]=='}')
23                 {
24                     ;
25                 }
26                 else return false;
27 
28             }
29         }
30         if (sta.empty())
31             return true;
32         else return false;
33     }
34 };
35 
36 int main()
37 {
38     Solution test;
39     string val = "()()]";
40     bool result = test.isValid(val);
41     cout << result << endl;
42     return 0;
43 }

 

posted on 2015-08-16 01:28  鼬与轮回  阅读(191)  评论(0编辑  收藏  举报