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 };

 

posted @ 2021-03-15 15:38  Mrsdwang  阅读(43)  评论(0编辑  收藏  举报