2022-03-22:二进制取反。 有一个二进制字符串,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将0变为1,将1变为0。那么取反之后的num可能的最大的字典序是多少呢。如有,num=1000,讲区间[nums2,...num4]取反变为1111是字典序最大的。 输入例子1:"1000"。 输出例子1:"1111"。 腾讯音乐2022校园招聘。
答案2022-03-22:
从左往右看,第一次遇到连续的所有0,全翻转。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
num := "1000"
ret := maxLexicographical(num)
fmt.Println(ret)
}
func maxLexicographical(num string) string {
arr := []byte(num)
i := 0
for i < len(arr) {
if arr[i] == '0' {
break
}
i++
}
for i < len(arr) {
if arr[i] == '1' {
break
}
arr[i] = '1'
i++
}
return string(arr)
}
执行结果如下: