文章目录
- 题目
 - 思路
 - 代码
 - 复杂度分析
 - 时间复杂度
 - 空间复杂度
 
- 结果
 - 总结
 
题目
题目链接🔗
 给你一个二进制字符串  
     
      
       
       
         b 
        
       
         i 
        
       
         n 
        
       
         a 
        
       
         r 
        
       
         y 
        
       
      
        binary 
       
      
    binary ,它仅有  
     
      
       
       
         0 
        
       
      
        0 
       
      
    0 或者  
     
      
       
       
         1 
        
       
      
        1 
       
      
    1 组成。你可以使用下面的操作任意次对它进行修改:
操作 1 :如果二进制串包含子字符串  
     
      
       
       
         " 
        
       
         00 
        
       
         " 
        
       
      
        "00" 
       
      
    "00" ,你可以用  
     
      
       
       
         " 
        
       
         10 
        
       
         " 
        
       
      
        "10" 
       
      
    "10" 将其替换。
 比方说,  
     
      
       
       
         " 
        
       
         00010 
        
       
         " 
        
       
         → 
        
       
         " 
        
       
         10010 
        
       
         " 
        
       
      
        "00010" \rightarrow "10010" 
       
      
    "00010"→"10010"
 操作 2 :如果二进制串包含子字符串 “10” ,你可以用 “01” 将其替换。
 比方说,  
     
      
       
       
         " 
        
       
         00010 
        
       
         " 
        
       
         → 
        
       
         " 
        
       
         00001 
        
       
         " 
        
       
      
        "00010" \rightarrow "00001" 
       
      
    "00010"→"00001"
 请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串  
     
      
       
       
         x 
        
       
      
        x 
       
      
    x 对应的十进制数字大于二进制字符串  
     
      
       
       
         y 
        
       
      
        y 
       
      
    y 对应的十进制数字,那么我们称二进制字符串  
     
      
       
       
         x 
        
       
      
        x 
       
      
    x 大于二进制字符串  
     
      
       
       
         y 
        
       
      
        y 
       
      
    y 。
示例 1:
输入:binary = “000110”
输出:“111011”
解释:一个可行的转换为:
“000110” -> “000101”
“000101” -> “100101”
“100101” -> “110101”
“110101” -> “110011”
“110011” -> “111011”
示例 2:
输入:binary = “01”
输出:“01”
解释:“01” 没办法进行任何转换。
提示:
- 1 ≤ b i n a r y . l e n g t h ≤ 1 0 5 1 \leq binary.length \leq 10^5 1≤binary.length≤105
 - b i n a r y binary binary 仅包含 ′ 0 ′ '0' ′0′ 和 ′ 1 ′ '1' ′1′ 。
 
思路
要求通过操作将给定的二进制字符串转换为最大的二进制字符串。根据题目中的提示,可以利用贪心的思想来解决这个问题。
首先观察到在最终的答案中,不会出现连续的 0 0 0,比如说 " 00 " "00" "00"这种情况,因为可以通过操作 1 1 1 将其变为更大的字符串。所以我们可以先将所有的连续的 00 00 00 替换为 10 10 10。
其次,最终答案至多包含一个 0 0 0。如果原始字符串中存在 010 010 010,我们可以将最右边的 000 000 000 移动到最左边,然后将其变为 101 101 101。这样可以保证得到的字符串更大。
最后,如果原始字符串中全是 111 111 111,则无需进行任何操作,直接返回原字符串即可。
代码
class Solution {
public:
    string maximumBinaryString(string binary) {
        int len=binary.size();
        int lin=0;
        int linwei=-1;
        for(int i=0;i<len;++i)
        {
            if(binary[i]=='0')
            {
                lin++;
                if(linwei==-1)linwei=i;
            }
        }
        string ans;
        for(int i=0;i<linwei+lin-1;++i)
            ans+='1';
        if(lin)ans+='0';
        else linwei=0;
        for(int i=linwei+lin;i<len;++i)
            ans+='1';
        return ans;
    }
};
 

复杂度分析
时间复杂度
O ( n ) O(n) O(n)
空间复杂度
O ( 1 ) O(1) O(1)
结果
总结
利用贪心的思想,通过统计连续0的数量和位置,并对字符串进行操作,使得得到的字符串尽可能大。通过遍历一次字符串,即可得到最终的结果。


















