题目 [点击即可]
解题思路:这题我一看到就想到了之前做过的一道题,括号的配对,那道题比这道题难,这道题有两种思路,一种是一步一步判断,一种是直接计算0与1的个数。
这是第一种,一步一步判断,用的是栈。
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<char>s;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
char a;
cin>>a;
if(s.empty())
s.push(a);
else
{
if(s.top()=='0'&&a=='1')
s.pop();
else if(s.top()=='1'&&a=='0')
s.pop();
else
s.push(a);
}
}
cout<<s.size()<<endl;
return 0;
}
第二种
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=200000;
int main()
{
int n;
char c;
int d1=0,d2=0;
char a[maxn]={-1};
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c;
a[i]=c;
}
for(int i=0;i<n;i++)
{
if(a[i]=='0')
d1++;
if(a[i]=='1')
d2++;
}
if(d1>=d2)
cout<<d1-d2<<endl;
else
cout<<d2-d1<<endl;
return 0;
}