• 算法---分割字符串的方案数


    题目

    给你一个二进制串 s (一个只包含 0 和 1 的字符串),我们可以将 s 分割成 3 个 非空 字符串 s1, s2, s3 (s1 + s2 + s3 = s)。

    请你返回分割 s 的方案数,满足 s1,s2 和 s3 中字符 ‘1’ 的数目相同。

    由于答案可能很大,请将它对 10^9 + 7 取余后返回。

    示例 1:

    输入:s = “10101”
    输出:4
    解释:总共有 4 种方法将 s 分割成含有 ‘1’ 数目相同的三个子字符串
    “1|010|1”
    “1|01|01”
    “10|10|1”
    “10|1|01”
    示例 2:

    输入:s = “1001”
    输出:0
    示例 3:

    输入:s = “0000”
    输出:3
    解释:总共有 3 种分割 s 的方法。
    “0|0|00”
    “0|00|0”
    “00|0|0”
    示例 4:

    输入:s = “100100010100110”
    输出:12

    提示:

    s[i] == ‘0’ 或者 s[i] == ‘1’
    3 <= s.length <= 10^5

    解决方法

        fun numWays(s: String): Int {
            val chars = s.toCharArray()
            val map = mutableMapOf<Int, Int>()
            var count = 0
            val base = 10.0.pow(9.0) + 7
            chars.forEachIndexed { index, c ->
                if (c == '1') {
                    map[count] = index
                    count++
                }
            }
    
            return if (count == 0) {
                val size = chars.size.toLong()
                var split = size - 1
                ((split * (split - 1) / 2) % base).toInt()
    
            } else if (count % 3 == 0) {
                val split = count / 3
                //long 也能越界????  这个越界不了 是上面的在越界
                (((map[split]!! - map[split - 1]!!).toLong() * (map[split * 2]!! - map[split * 2 - 1]!!) % base).toInt())
            } else {
                0
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    思路可参考

    总结

    1.高中的组合排列 一定要学好 这样做这这种需要一些这方面相关的知识
    2.插扳法的应用
    3.用到了排列组合公式 温习了一下高中的知识

  • 相关阅读:
    深入理解安卓ARouter:集成与应用
    关于小编入坑第512天
    思腾云计算
    python绘图常见问题及解决方法总结
    Java JVM——12. 垃圾回收理论概述
    【云原生】聊聊为什么需要docker以及其基础架构
    require模块化语法
    spring启动流程(二):包的扫描流程
    Vue脚手架的搭建
    STM32笔记
  • 原文地址:https://blog.csdn.net/u013270444/article/details/133908715