有一个二进制字符串,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将
变为
,将
变为
。那么取反之后的
可能的最大的字典序是多少呢。如有
,将区间
取反变为
是字典序最大的。
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @return string字符串
*/
public String maxLexicographical (String num) {
// write code here
char[] str = num.toCharArray();
// 找到第一个0
int idx = 0;
while(idx < str.length && str[idx] != '0') idx++;
// 把从这个0开始的连续0全部变为1
while(idx < str.length && str[idx] == '0') str[idx++] = '1';
return new String(str);
}
} class Solution:
def maxLexicographical(self , num ):
# 第一部分找0位置
c = []
for i,a in enumerate(num):
if a=='0':
c.append(i)
if c == []:
return num
# 第二部分找出连续0个数和分割点j
i = 0
j = 0
while i < len(c)-1:
if c[i]+1 == c[i+1]:
i += 1
j = c[i]+1
else:
j = c[i]+1
break
num = num[0:c[0]] + '1'*(i+1) + num[j:] #连接字符串
return num class Solution: def maxLexicographical(self, num: str) -> str: # write code here i = 0 numlist = list(num) while i < len(numlist) and numlist[i] == "1": i += 1 while i < len(numlist) and numlist[i] == "0": numlist[i] = "1" i += 1 return "".join(numlist)
public String maxLexicographical (String num) {
// write code here
StringBuilder sb = new StringBuilder( num);
for (int i = 0 ; i < num.length(); i++) {
if (num.charAt(i) == '0') {
int j = i;
while (j < num.length() && num.charAt(j) == '0') {
sb.setCharAt(j, '1');
j++;
}
break;
}
}
return sb.toString();
} package main
import _"fmt"
import "strings"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @return string字符串
*/
func maxLexicographical( num string ) string {
ans:=""
var flag bool
var end int
for i,ch:=range num{
if ch=='0'{
flag=true
}
if flag{
if ch=='1'{
end=i
break
}
if i+1==len(num){
end=i+1
break
}
}
}
ans=strings.Repeat("1",end)+num[end:]
return ans
} class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @return string字符串
*/
string maxLexicographical(string num) {
// write code here
int i = 0;
int j = i;
for(i=0; i<num.length(); i++){
if(num[i] == '0'){
while(i<num.length() && num[i] != '1'){
num[i] = '1';
i++;
}
break;
}
}
return num;
}
}; char[] chars = num.toCharArray();
// 如果是第一个字符是0
if (chars[0] == '0') {
int oneIndex = num.indexOf("1");
if(oneIndex == -1) {
return num.replaceAll("0","1");
}
String pre = num.substring(0, oneIndex).replaceAll("0", "1");
return pre + num.substring(oneIndex,num.length());
}
// 遍历
for (int i = 0; i < chars.length; i++) {
if (chars[i] != '1') {
int nextOneIndex = num.indexOf('1', i);
if (nextOneIndex == -1) {
return num.replaceAll("0","1");
}
return num.substring(0, nextOneIndex).replaceAll("0", "1") + num.substring(nextOneIndex,num.length());
}
}
return num; class Solution: def maxLexicographical(self , num ): # write code here res = '' for i in range(len(num)): if num[i] == '0': while i < len(num): if num[i] == '1': res += num[i:] return res res += '1' i += 1 if i == len(num): return res else: res += num[i] return res
class Solution: def maxLexicographical(self , num ): # write code here l, r = -1, len(num)-1 for i in range(len(num)): if num[i] == '0' and l==-1: l = i if num[i] == '1' and l != -1: r = i-1 break if l==-1: return num res = num[:l] + '1'*len(num[l:r+1]) + num[r+1:] return res
从左开始连续的 0 翻转即可
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @return string字符串
*/
function maxLexicographical( num ) {
// write code here
let newStr = "", status = "";
for(let i = 0; i < num.length; i ++) {
if(+num[i] === 0 && (!status || status === "open")) {
newStr += 1;
status = "open";
} else if(+num[i] === 1 && status === "open") {
newStr += num[i];
status = "close";
} else {
newStr += num[i];
}
}
return newStr;
}
module.exports = {
maxLexicographical : maxLexicographical
}; import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num string字符串
* @return string字符串
*/
public String maxLexicographical (String num) {
// write code here
if(num.length()<2)return "1";
char[] max = num.toCharArray();
int low=0,high=0;
while(low < max.length){
if(max[low]=='0'){
while(max[low]=='0'&&low<max.length){
max[low]='1';
low++;
if(low>max.length-1)
break;
}
break;
}
low++;
}
String s =String.valueOf(max);
return s;
}
} public String maxLexicographical (String num) {
// write code here
char[] c = num.toCharArray();
int a = 0;
int b = 0;
for(int i = 0; i < c.length; i++){
if(c[i] == '0'){
a = i;
i++;
while(i < num.length() && c[i] != '1'){
i++;
}
b = i;
break;
}
}
StringBuffer s = new StringBuffer();
for(int i = a ;i < b; i++){
s.append('1');
}
return num.substring(0,a) +s.toString() + num.substring(b,num.length());
}
}