标签:678 back return 括号 字符串 star false left
题目:
解答:
这道题因为只需要判断是否可以构成有效的括号,并不需要列举出合法的解。
可以直接遍历一遍字符串,记录出现的括号和*的情况。
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,back,return,括号,字符串,star,false,left 来源: https://www.cnblogs.com/ocpc/p/12826155.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。