字符串678. 有效的括号字符串
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串678. 有效的括号字符串相关的知识,希望对你有一定的参考价值。
题目:
解答:
这道题因为只需要判断是否可以构成有效的括号,并不需要列举出合法的解。
可以直接遍历一遍字符串,记录出现的括号和*的情况。
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. 有效的括号字符串的主要内容,如果未能解决你的问题,请参考以下文章