NC172. 二进制取反
描述
有一个二进制字符串,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将变为,将变为。那么取反之后的可能的最大的字典序是多少呢。如有,将区间取反变为是字典序最大的。
示例1
输入:
"1000"
输出:
"1111"
说明:
示例2
输入:
"1001"
输出:
"1111"
说明:
对区间取反能使得字典序最大。C++ 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-11-29
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ string maxLexicographical(string num) { // write code here int n = num.length(); if (n == 0) return num; int kl = -1; int kr = n; for (int i = 0; i < n; i++) { if (num[i] == '0' && kl == -1) { kl = i; } if (num[i] == '1' && kl != -1) { kr = i; break; } } if (kl != -1) { for (int i = kl; i < kr; i++) { num[i] = '1'; } } return num; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 416KB, 提交时间: 2021-10-23
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ string maxLexicographical(string num) { // write code here int len=num.size(); if(len==0)return num; int index=-1; for(int i=0;i<len;i++){ if(num[i]=='0'){ index=i; break; } } if(index==-1)return num; int cnt=0; while(index+cnt<len&&num[index+cnt]=='0'){ num[index+cnt]='1'; cnt++; } return num; } };
C 解法, 执行用时: 2ms, 内存消耗: 420KB, 提交时间: 2022-02-10
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* maxLexicographical(char* num ) { // write code here char* c = num; while(*c!=0){ if(*c == '1'){ c = c+1; continue; }else{ while(*c=='0'){ *c = '1'; c = c+1; } break; } } return num; }
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ string maxLexicographical(string num) { bool flag = false; for(int i = 0;i<num.size();i++){// write code here if(num[i] == '0'){ flag = true; num[i] = '1'; }else if(flag && num[i]=='1'){ break; } } return num; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-05-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串 */ string maxLexicographical(string num) { int l=-1; int r=num.size()-1; for(int i=0; i<num.size(); i++) { if(num[i]=='0' && l==-1) l=i; if(num[i]=='1' && l!=-1) { r=i-1; break; } } if(l==-1) return num; for(int i=l; i<=r; i++) num[i]='1'; return num; } };