我的思路是:从右往左开始翻转,当末位出现零时,删去字符串中的1(同时学会了如何删去string字符串变量中的字符(串)),然后循环。
问题是:这种思路的时间复杂度接近于o(n*n),主要是因为:每次循环中都要嵌套一个循环来将前面的10反转。
果不其然,TLE了
#include <bits/stdc++.h>
using namespace std;
string s;
void turn (int x);
/*收获 :s-="s" 不行,只能s[s.length()-1]
要想删除字符串中的指定字符串只能用
string str;
string target;
int pos = str.find(target); //且find从头开始找,找到截至
n = target.size();
str = str.erase(pos,n); //从pos这个位置开始,删除n个字符
*/
int main(){
cin>>s;
int ans=0,d=s.length();
while (d>=1){
while (s[s.length()-1]=='1'){
s.erase(s.length()-1,1);
d--;
}
turn(s.length());
ans++;
}
cout<<ans-1;
}
void turn(int x){
for (int i=0;i<x;i++){
if (s[i]-'0'){
s[i]='0';
}else{