• 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();
        }
    }
    
  • 相关阅读:
    华为部分真机调试无法显示log问题解决
    Android Studio 配置模拟器AVD存放路径(默认在c盘,解决c盘空间不够问题)
    Android Studio Build APK没有报错,但是Generate signed apk报错
    安卓如何将TXT文件写到特定路径
    unity 显示、隐藏Android导航栏
    Unity 代码集锦之图片处理
    打开文件夹
    MVC总结
    unity 获取UGUI中的Text字的坐标
    Unity WWW类调用http
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074819.html
Copyright © 2020-2023  润新知