LeetCode之Count Binary Substrings(Kotlin)

问题:
Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all the 0’s and all the 1’s in these substrings are grouped consecutively.
Substrings that occur multiple times are counted the number of times they occur.

Note:
s.length will be between 1 and 50,000.
s will only consist of “0” or “1” characters.


方法:
以0|1作为分界线,如00|11或者00|111,分界线前后0的长度和1的长度取min的值就是分界线前后的子串数,求所有分界线前后的子串数的和即为所有子串的个数。

具体实现:

class CountBinarySubstrings {
    fun countBinarySubstrings(s: String): Int {
        var pre = s[0]
        var curLen = 0
        var preLen = 0
        var result = 0
        for (ch in s) {
            if (ch == pre) {
                curLen++
            } else {
                result += minOf(preLen, curLen)
                pre = ch
                preLen = curLen
                curLen = 1
            }
        }
        result += minOf(preLen, curLen)
        return result
    }
}

fun main(args: Array<String>) {
    val countBinarySubstrings = CountBinarySubstrings()
    val result = countBinarySubstrings.countBinarySubstrings("10101")
    println("result: " + result)
}

有问题随时沟通

具体代码实现可以参考Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值