zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 761 特殊的二进制序列(括号问题)

    761. 特殊的二进制序列

    特殊的二进制序列是具有以下两个性质的二进制序列:

    0 的数量与 1 的数量相等。
    二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。
    给定一个特殊的二进制序列 S,以字符串形式表示。定义一个操作 为首先选择 S 的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)

    在任意次数的操作之后,交换后的字符串按照字典序排列的最大的结果是什么?

    示例 1:

    输入: S = “11011000”
    输出: “11100100”
    解释:
    将子串 “10” (在S[1]出现) 和 “1100” (在S[3]出现)进行交换。
    这是在进行若干次操作后按字典序排列最大的结果。
    说明:

    S 的长度不超过 50。
    S 保证为一个满足上述定义的特殊 的二进制序列。

    PS:

    既然是01子串,为什么不当成括号处理呢?

     
    
    class Solution {
       public String makeLargestSpecial(String S) {
            StringBuilder sb = new StringBuilder();
            List<String> list = new ArrayList<>();
            int start = 0;
            int countOne = 0;
            for(int i = 0; i < S.length(); ++i) {
                countOne += S.charAt(i) == '1' ? 1 : -1;
                if(countOne == 0) {
                    String str = S.substring(start + 1, i);
                    list.add("1" + makeLargestSpecial(str) + "0");
                    start = i + 1;
                }
            }
            Collections.sort(list);
            for(int i = list.size() - 1; i >= 0; --i) 
                sb.append(list.get(i));
            return sb.toString();
        }
    }
    
  • 相关阅读:
    STM32时钟配置方法详解
    STM32 入门之 GPIO
    arm可以干什么
    四两拨千斤,ARM是如何运作、靠什么赚钱的
    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
    ARM与单片机到底有啥区别
    实得打印机色带芯更换
    IE浏览器不能上传图片
    IE FANS
    win8,win10里面内置的IE浏览器网银无法输入密码
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074662.html
Copyright © 2011-2022 走看看