🚩传送门:牛客题目

题目

有一个二进制字符串 [NC]172. 二进制取反 - 图1,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将[NC]172. 二进制取反 - 图2变为[NC]172. 二进制取反 - 图3,将[NC]172. 二进制取反 - 图4变为[NC]172. 二进制取反 - 图5。那么取反之后的 [NC]172. 二进制取反 - 图6可能的最大的字典序是多少呢 ?

如有 [NC]172. 二进制取反 - 图7,将区间[NC]172. 二进制取反 - 图8取反变为[NC]172. 二进制取反 - 图9是字典序最大的。

示例 1:

输入: “1000” 输出: “1111”

解题思路:模拟

对最先出现的连续0 区域进行取反,如 1**00**10101 想要字典序最大则取反 1**11**10101

复杂度分析

时间复杂度: [NC]172. 二进制取反 - 图10 ,其中 [NC]172. 二进制取反 - 图11 是字符数组的长度,最坏情况从头取反到结束。

空间复杂度:[NC]172. 二进制取反 - 图12

我的代码

  1. public class Solution {
  2. public String maxLexicographical (String num) {
  3. if (num == null || num.length() == 0)return num;
  4. char[]nums = num.toCharArray();
  5. boolean needbreak = false;
  6. for (int i = 0; i < nums.length; i++) {
  7. if (nums[i] == '0') {
  8. nums[i] = '1';
  9. // 后面出现1就说明取反区域结束
  10. needbreak = true;
  11. }else if(needbreak) break;
  12. }
  13. return new String(nums);
  14. }
  15. }