首页 > 试题广场 >

二进制取反

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

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

示例1

输入

"1000"

输出

"1111"

说明

如题意描述。
示例2

输入

"1001"

输出

"1111"

说明

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

备注:
num的长度不超过1000。
从左开始连续的 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
};


发表于 2021-12-04 17:52:22 回复(0)