iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php中二进制子串怎么进行计数
  • 805
分享到

php中二进制子串怎么进行计数

2023-06-20 17:06:59 805人浏览 安东尼
摘要

这篇文章主要介绍PHP中二进制子串怎么进行计数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述:给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合

这篇文章主要介绍PHP中二进制子串怎么进行计数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

题目描述:

给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。

重复出现的子串要计算它们出现的次数。

示例 1 :

输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。

示例 2 :

输入: "10101"输出: 4解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。

超时代码(C#):

 public class Solution        {            public int CountBinarySubstrings(string s)            {                string temp;                int count = 0;                int length = 2;                bool sign = false;                while (length <= s.Length)                {                    for (int i = 0; i < s.Length - length + 1; i++)                    {                        sign = false;                        temp = s.Substring(i, length);                        int zeroend = temp.LastIndexOf('0');                        int zerostart = temp.IndexOf('0');                        int onestart = temp.IndexOf('1');                        int oneend = temp.LastIndexOf('1');                        if (zerostart == -1 || zeroend == -1 || oneend == -1 || onestart == -1)                        {                            sign = true;                            continue;                        }                        for (int j = zerostart + 1; j < zeroend; j++)                        {                            if (temp[j] != '0')                            {                                sign = true;                                break;                            }                        }                        for (int j = onestart + 1; j < oneend; j++)                        {                            if (temp[j] != '1')                            {                                sign = true;                                break;                            }                        }                        if (!sign)                            count++;                    }                                      length += 2;                }                return count;            }        }

之前的思路是暴力求解的思路,从字符串的第一位到其Length-字串的长度+1为止,求出0,1的开始和结束索引,然后再用循环在这个区间内判断是否全部为0或1,如果是的话就count++,最后返回count的值就可以了,但是由于时间复杂度较高就会出现超时的情况,那么就更改为下面的算法:

更改后代码:

public class Solution        {            public int CountBinarySubstrings(string s)            {                int a = 1, b = 0;                char num;                bool sign = false;                int count=0;                num = s[0];                int i = 0;                int index = 0;                while (i<s.Length-1)                {                    i++;                    if (s[i] == num && sign == false)                    {                        a++;                    }                     else if (s[i] == num && sign == true)                    {                        b++;                    }                    else if (s[i] != num && !sign)                    {                        b++;                        index = i;                        sign = true;                        num = s[i];                    }                    else if (s[i] != num && sign)                    {                        if (a > b)                            count += b;                        else                            count += a;                        a = 1;                        b = 0;                        i = index;                        sign = false;                    }                    if(i==s.Length-1)                    {                          if (a > b)                            count += b;                        else                            count += a;                    }                }                return count;            }        }

更改后算法的思路就是从字符串的开始到末尾遍历,求出连续的1或者0的个数(算法中的a),若后面的数不同于前面的数,先记下当前的索引位置然后再求后面的数相同的个数(算法中的b)直到再次遇到与当前数不同的数或者到末尾为止,然后比较a,b的大小,count+=两个数中的小数,那么count就是所求的答案。

以上是“php中二进制子串怎么进行计数”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: php中二进制子串怎么进行计数

本文链接: https://www.lsjlt.com/news/298985.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php中二进制子串怎么进行计数
    这篇文章主要介绍php中二进制子串怎么进行计数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述:给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合...
    99+
    2023-06-20
  • JavaScript中怎么对二进制进行操作
    这篇文章将为大家详细讲解有关JavaScript中怎么对二进制进行操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二进制数据在JS程序里的表达现今世界上几...
    99+
    2024-04-02
  • php怎么将字符串转换成二进制
    本文小编为大家详细介绍“php怎么将字符串转换成二进制”,内容详细,步骤清晰,细节处理妥当,希望这篇“php怎么将字符串转换成二进制”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php将字符串转换成二进制的方法:...
    99+
    2023-06-30
  • php如何将二进制转为16进制字符串
    本篇内容介绍了“php如何将二进制转为16进制字符串”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php将二进制转为16进制字符串的方法:1...
    99+
    2023-06-28
  • VB.NET中怎么对二进制文件进行操作
    今天就跟大家聊聊有关VB.NET中怎么对二进制文件进行操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。VB.NET二进制文件操作主要应用的方法和函数有:Open,Close,Get...
    99+
    2023-06-17
  • PHP如何转换十六进制字符串为二进制字符串
    这篇文章将为大家详细讲解有关PHP如何转换十六进制字符串为二进制字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何将十六进制字符串转换为二进制字符串 前言: 十六进制和二进制是计算机科学中常用的两种...
    99+
    2024-04-02
  • php怎么实现转化为二进制字符串
    小编给大家分享一下php怎么实现转化为二进制字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现字符串转化为二进制字符串的方法:首先创建一个PHP示例文...
    99+
    2023-06-14
  • java怎么将二进制字符串转换成十进制
    在Java中,可以使用`Integer.parseInt()`方法将二进制字符串转换为十进制数。以下是一个示例代码:```javap...
    99+
    2023-09-20
    java
  • 电脑计算器怎么算十进制转二进制
    本文小编为大家详细介绍“电脑计算器怎么算十进制转二进制”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑计算器怎么算十进制转二进制”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。电脑计算器算十进制转二进制的方法:...
    99+
    2023-07-02
  • VBS中怎么把二进制数据转换为字符串
    这篇文章主要讲解了“VBS中怎么把二进制数据转换为字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VBS中怎么把二进制数据转换为字符串”吧!至少有三种以上办法,可以把二进制数据(比如您从...
    99+
    2023-06-08
  • Android怎么使用socket进行二进制流数据传输
    本篇内容主要讲解“Android怎么使用socket进行二进制流数据传输”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么使用socket进行二进制流数据传输”吧!简单的自定义协议...
    99+
    2023-07-06
  • PHP中进行二进制转换的方法和技巧是什么
    这篇文章主要介绍了PHP中进行二进制转换的方法和技巧是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP中进行二进制转换的方法和技巧是什么文章都会有所收获,下面我们一起来看看吧。首先,我们需要了解一些基础...
    99+
    2023-07-06
  • JS十进制怎么转二进制
    这篇文章主要介绍了JS十进制怎么转二进制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS十进制怎么转二进制文章都会有所收获,下面我们一起来看看吧。计算十进制转换为二进制的过程可以当成把每个计算后取余的数字压入...
    99+
    2023-06-27
  • php字符串如何转成二进制字符串
    这篇“php字符串如何转成二进制字符串”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php字符串如何转成二进制字符串”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让...
    99+
    2023-06-06
  • php如何将二进制转为字符串
    这篇文章主要介绍“php如何将二进制转为字符串”,在日常操作中,相信很多人在php如何将二进制转为字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何将二进制转为字符串”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • CentOS6.5 tar.gz怎样进行二进制安装jdk1.7.0_79
    本篇文章给大家分享的是有关CentOS6.5 tar.gz怎样进行二进制安装jdk1.7.0_79,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。新申请华为云机器,二进制文件安装...
    99+
    2023-06-06
  • android怎么运行二进制文件
    在Android上运行二进制文件,需要通过终端或者使用相关的应用程序来执行。以下是一种常见的方法:1. 打开终端或者使用一个支持运行...
    99+
    2023-08-14
    android
  • 怎么进行MySQL二进制版本快速部署
    怎么进行MySQL二进制版本快速部署,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。源码安装虽然有着更加灵活和更加优化等诸多优势...
    99+
    2024-04-02
  • 浅析PHP中进行二进制转换的方法和技巧
    PHP是一门广泛应用于Web开发的编程语言,它提供了许多函数和工具来处理数字、字符串、文件等数据类型。其中,二进制的转换也是经常需要用到的操作之一。这篇文章将介绍一些在PHP中进行二进制转换的方法和技巧。首先,我们需要了解一些基础概念。二进...
    99+
    2023-05-14
  • php转二进制的函数是什么
    这篇“php转二进制的函数是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php转二进制的函数是什么”文章吧。php转二...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作