看了一些题解有些用到栈,有些判断了好几种情况。实际上本题只需要找到从左往右的第一个1和从右往左的第一个0,然后删除这一段就可以了(包括左端点1但不包括右端点0),附AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
string a;
cin >> n >> a;
int i=0, j=n-1;
while (i < n-1 && a[i] != '1') i++;
while (j > 0 && a[j] != '0') j--;
if (i<=j) a.erase(a.begin()+i, a.begin()+j);
cout << a << endl;
}
return 0;
}