🚩传送门:牛客题目
题目
有一个二进制字符串 ,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将
变为
,将
变为
。那么取反之后的
可能的最大的字典序是多少呢 ?
如有 ,将区间
取反变为
是字典序最大的。
示例 1:
输入: “1000” 输出: “1111”
解题思路:模拟
对最先出现的连续0 区域进行取反,如 1**00**10101 想要字典序最大则取反 1**11**10101
复杂度分析
时间复杂度: ,其中
是字符数组的长度,最坏情况从头取反到结束。
空间复杂度:
我的代码
public class Solution {public String maxLexicographical (String num) {if (num == null || num.length() == 0)return num;char[]nums = num.toCharArray();boolean needbreak = false;for (int i = 0; i < nums.length; i++) {if (nums[i] == '0') {nums[i] = '1';// 后面出现1就说明取反区域结束needbreak = true;}else if(needbreak) break;}return new String(nums);}}
