要找改哪个区间最大,肯定是越左边越好,所以从左边开始找到第一个0即可

确定了左端点,直接从左端点开始往后走,把这个区间的0都走完,改成1。

c++实现

class Solution {
public:
    string maxLexicographical(string num) {
        // write code here
        int len = num.size(), i;
        
        for(i=0; i<len; i++){
            if(num[i] == '0') break;     //确定左端点
        }
        while(num[i] == '0'){   //从左端点开始往后改,直到遇到1为止
            num[i] = '1';
            i++;
        }
        return num;
    }
};

python实现

class Solution:
    def maxLexicographical(self , num):
        # write code here
        i=0
        while i < len(num):
            if num[i] == '0':
                break
            i+=1
        j=0
        while i<len(num) and num[i] == '0':
            i+=1
            j+=1
        result = num.replace('0', '1', j)
        return result