首页 > 试题广场 >

二进制取反

[编程题]二进制取反
  • 热度指数:3905 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

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

示例1

输入

"1000"

输出

"1111"

说明

如题意描述。
示例2

输入

"1001"

输出

"1111"

说明

对区间[num_2,num_3]取反能使得字典序最大。    

备注:
num的长度不超过1000。
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;
    }
}

发表于 2021-11-18 20:16:58 回复(0)