根据首元素是0还是1确定不同的边界。
首元素是0时,左边界为0,右边界为第一个出现的‘1’的下标再减1.
首元素为1时,继续遍历,左边界为第一个出现的‘0’的下标,当然也可能遍历完也没有出现,这就是全1的情况,已是最大,那么直接返回原数即可。
有0出现确定了左边界,那么继续遍历,第一个出现的‘1’的下标减1就是右边界。当然也可能遍历完也没有再出现1,没关系,右边界为n-1,仍然有效。
char* maxLexicographical(char* num ) { int n = strlen(num); int from, to, i = 0; if(num[0] == '0'){ from = 0; while(num[i] == '0' && i < n) i++; to = i-1; } else if(num[0] = '1'){ while(num[i] == '1' && i < n) i++; from = i; if(i == n) return num; while(num[i] == '0' && i < n) i++; to = i-1; } for(i = from; i <= to; i++) num[i] = '1'; return num; }