- 思路
自己的思路时间复杂度高,超时了,看了答案后恍然大悟,只需要知道第一个0的位置和0的个数就可以确定最后的最大数 - 代码
看答案后的代码,这里可以用一些库函数进行优化
cpp
class Solution {
public:
string maximumBinaryString(string binary) {
int len = binary.length();
string ans(len, '1');
int first_zero = 0, num_zero = 0;
for (int i = 0; i < len; i++) {
if (binary[i] == '0') {
num_zero++;
}
}
for (int i = 0; i < len; i++) {
if (binary[i] == '0') {
first_zero = i;
break;
}
}
if (num_zero != 0) {
ans[first_zero + num_zero - 1] = '0';
}
return ans;
}
};
自己代码
cpp
class Solution {
public:
string maximumBinaryString(string binary) {
stack<char> stk1;
string ans;
for(int i = 0; i < binary.length(); i++) {
if (i == 0) {
stk1.push(binary[i]);
continue;
}
if (binary[i] == '0') {
if (stk1.top() == '1') {
int num = 0;
while(!stk1.empty() && stk1.top() == '1') {
num++;
stk1.pop();
}
if (stk1.empty()) {
while(num--) stk1.push('1');
stk1.push('0');
} else {
stk1.pop();
stk1.push('1');
stk1.push('0');
while(num--) stk1.push('1');
}
} else {
stk1.pop();
stk1.push('1');
stk1.push('0');
}
} else {
stk1.push('1');
}
}
while(!stk1.empty()){
ans.push_back(stk1.top());
stk1.pop();
}
reverse(ans.begin(), ans.end());
return ans;
}
};