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