1221. Split a String in Balanced Strings
仅供自己学习
思路:
因为也是滞后匹配,可能多个R后才出现L,所以我们使用一个栈,来存放前面为被匹配的元素。
加入栈的条件是栈为空,或者当前元素与栈顶元素相同。匹配的条件就是加入栈的条件的非,因为加入栈的条件保证了不会出现RL这种匹配的情况出现在栈中
然后如何计数有多少种平衡的字串呢。我们通过每次加入进栈就用count+1,然后每次匹配就将count-1,如果count=0后,就将maxn+1,通过这种方式计数。
代码:
1 class Solution { 2 public: 3 int balancedStringSplit(string s) { 4 stack<char> st; 5 int maxn=0; 6 int count=0; 7 for(int i=0;i<s.length();++i){ 8 if(st.empty()||st.top()==s[i]){ 9 st.push(s[i]); 10 count++; 11 } 12 else{ 13 count--; 14 if(count==0) maxn++; 15 st.pop(); 16 } 17 18 } 19 return maxn; 20 } 21 };
这种匹配的题都可以通过对一个元素进行加法,而出现对匹配的元素进行减法。用一个count,当出现R时count++,出现L时count--,每当count==0时,maxn就+1.
1 class Solution { 2 public: 3 int balancedStringSplit(string s) { 4 int maxn=0; 5 int count=0; 6 for(auto& a:s){ 7 if(a=='R') count++; 8 else count--; 9 if(count==0) maxn++; 10 } 11 return maxn; 12 } 13 };