码迷,mamicode.com
首页 > 其他好文 > 详细

【字符串】678. 有效的括号字符串

时间:2020-05-04 13:27:25      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:alt   ima   turn   图片   大于   code   class   style   width   

题目:

技术图片

 

 

解答:

这道题因为只需要判断是否可以构成有效的括号,并不需要列举出合法的解。
可以直接遍历一遍字符串,记录出现的括号和*的情况。

 1 class Solution {
 2 public:
 3      bool checkValidString(string s) 
 4      {
 5         // left和star分别记录出现的"("和"*"出现的index。
 6         vector<int>left,star;
 7 
 8         for(int i=0;i<s.size();i++)
 9         {
10             if(s[i]==() 
11             {
12                 left.push_back(i);
13             }
14             else if(s[i]==*) 
15             {
16                 star.push_back(i);
17             }
18             else
19             {
20                 //当出现")"的时候,先判断left中是否有元素,有就直接pop,否则的话看看star里面是否有元素
21                 //如果都没有,那么就说明")"比"("和"*"都多,是非法解,返回false
22                 if(left.size()>0) 
23                 {
24                     left.pop_back();
25                 }
26                 else if(star.size()>0) 
27                 {
28                     star.pop_back();
29                 }
30                 else 
31                 {
32                     return false;
33                 }
34             }
35         }
36         //最后来判断"("是否合法,如果left的数量大于star,一定不合法,return false
37         if(left.size()>star.size()) 
38         {
39             return false;
40         }
41         //不然的话,就需要满足,对于任何一个左括号,它的右边必须至少有一个星号
42         //所以从后往前看,如果有一个左括号的右边没有星号,也就是star.back()<left.back() 就不合法
43         for(int i=left.size()-1;i>=0;i--)
44         {
45             if(star.back()<left.back()) 
46             {
47                 return false;
48             }
49             star.pop_back();
50             left.pop_back();
51         }
52         return true;
53     }
54 };

 

【字符串】678. 有效的括号字符串

标签:alt   ima   turn   图片   大于   code   class   style   width   

原文地址:https://www.cnblogs.com/ocpc/p/12826155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!