🚩传送门:牛客题目
题目
有一个二进制字符串 ,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将
变为
,将
变为
。那么取反之后的
可能的最大的字典序是多少呢 ?
如有 ,将区间
取反变为
是字典序最大的。
示例 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);
}
}