算法分析
这样的题常常容易想复杂,这道题其实只要删掉第一个一出现的地方到第一个一出现之后第最后一个0出现的地方之间的部分即可。具体可以用递归的思想来理解这个过程。
在代码实现方面,可以借助string里的erase函数。
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
string str;
int len;
scanf("%d",&len);
cin>>str;
int a=-1,b=-1; //用两个变量来控制下标
for(int i=0;i<str.size();i++){
if(a==-1 && str[i]=='1') a=i;
if(a!=-1 && str[i]=='0') b=i;
}
if(a==-1 || b==-1){
cout<<str<<endl;
}
else{
str.erase(a,b-a);
cout<<str<<endl;
}
}
return 0;
}