一个有关字符串子串的有趣问题

问题描述:

  1. 输入一个字符串。

  2. 输入的字符串仅由'0'和'1'组成,比如'10100011101'这样的。

  3. 从输入的字符串中截取一段连续的片段作为子串,且子串满足从左往右数,'0'的个数总是不比'1'少。

  4. 输出其满足条件的最长的子串的长度。

下面是JavaScript的实现:

function subString(str){
    var arr = str.split('');
    var result = 0;
    (function loop(i){
        if (result + i <= arr.length && arr[i] !== '0'){
            loop(i+1);
        } else if ( result + i <= arr.length ) {
            var l = 1;
            var subLength = 1;            
            (function subLoop(k){
                if( l > 0 || arr[k] === '0' && k < arr.length ){
                    subLength++;
                    l += arr[k]==='0' ? 1 : -1;
                    result = result>subLength ? result : subLength;
                    subLoop(k+1);
                } else if ( k < arr.length ) {
                    loop(i+1)
                }
            }(i+1))
        }
    }(0))

    return result;
}

解决思路:穷举从第i个字符开始的所有满足条件的最长字符串,取其中最长的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值