题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=187940
题意:
单组案例,输入由0和1组成的字符串,相邻的字符如果一方为0,另一方为1,则移除这两个字符,问将字符串满足条件的字符完全移除后字符串长度。
案例:
Sample
Input
4
1100
Output
0
Input
5
01010
Output
1
Input
8
11101111
Output
6
分析:
刚看到这题时,我首先想到的是栈,所以用栈的方式做了一次,不过输出总是出错,可能编译部分出错,但自己没找到。后来发现这题其实很简单,不用观察相邻的字符是否符合条件,只需判断0和1的个数分别为多少,再拿大的一方减去小的一方即可。具体原因,稍稍转变思想就可以想到了。
源代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=200000; 6 char a[maxn]; 7 int main() 8 { 9 int n,i,j=0,k=0; 10 cin>>n; 11 scanf("%s",a); 12 for(i=0;i<n;i++) 13 { 14 if(a[i]=='0')//找出字符串中0的个数 15 j=j+1; 16 else if(a[i]=='1') //找出字符串中1的个数 17 k=k+1; 18 } 19 if(k>j)//输出最终结果 20 cout<<k-j<<endl; 21 else cout<<j-k<<endl; 22 return 0; 23 }