首页 > 试题广场 >

交错01串

[编程题]交错01串
  • 热度指数:581 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。

输入描述:
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'


输出描述:
输出一个整数,表示最长的满足要求的子串长度。
示例1

输入

111101111

输出

3
#include <stdio.h>
int main(void)
{
    //定义变量
    int i = 0;
    int num = 0;
    char s[50] = {0};
    int length = 1;
    int max = 1;
   
    //输入字符串
    scanf("%s", s);
    num = strlen(s);
   
    for(i=1; i<num; i++)
    {
        //符合加1
        if(s[i] != s[i-1])
        {
            length = length + 1;
            //判断赋值
            if(max < length)
            {
                max = length;
            }
        }
        //中断清1
        else
        {
            length = 1;
        }
    }
    //打印结果
    printf("%d", max);
    return 0;
}
发表于 2019-08-03 10:23:11 回复(0)
s=input()
dp=[1]*len(s)
fori inrange(1,len(s)):
    ifs[i]!=s[i-1]:
        dp[i]=dp[i-1]+1
print(max(dp))
发表于 2019-08-03 10:48:00 回复(0)
while True:
  try:
    string =str(raw_input())
    length =len(string)
    if length ==0:
     print 0
    start =0
   maxlength =0
    for i in range(1,length):
       if string[i] !=string[i-1]:
        if i ==length-1:
          maxlength =max(i-start+1,maxlength)
        else:
          pass
      else:
        maxlength =max(i-start,maxlength)
       start =i
    print maxlength
  except:
   break

编辑于 2018-08-07 11:24:11 回复(0)
s = input()
if not s:
    print(0)

j = 1
max1 = 1
for i in range(0, len(s)-1):

    if s[i] == s[i+1]:
        if j > max1:
            max1 = j
        j = 1
    else:
        j += 1
        
if j > max1:
    print(j)
else:
    print(max1)


发表于 2020-06-29 11:01:16 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s,tmp,ss;
    bool flag=false;
    int res=1;
    cin>>s;
    int len=s.length();
    ss=s[0];
    for(int i=1;i<len;i++)
    {
        if(s[i]!=s[i-1])
        {
            tmp=s[i];
            ss.append(tmp);
            if(res<ss.length())
                res=ss.length();
            flag=true;
 
        }
       if(flag)
        {
            if(res<ss.length())
               res=ss.length();
        }
        else ss=s[i];
        if(flag&&s[i]==s[i-1])
        {
            if(res<ss.length())
               res=ss.length();
            ss=s[i];
            continue;
        }
    }
    cout<<res<<endl;
    system("pause");
}

发表于 2019-09-20 15:27:42 回复(0)
s = raw_input()

def get_ans(s):
    leng = len(s)
    if len(set(s)) == 1 or leng == 1: return 1  #这里不太懂。如果全是1或者0的话,当成长度是1?
    s = map(int, s)
    dp = [0 for i in range(leng)]

    for i in range(1,leng):
        if s[i] + s[i-1] == 1:   #涵盖01,10两种情况
            if dp[i-1] == 0:
                dp[i] = 2      #刚一重新计数的时候,一下子从0变到2。如11后加个0,长度立刻变成2
            else:
                dp[i] = dp[i-1] + 1   #其他情况,加1即可。
        else:  
            dp[i] = 0   

    return max(dp)

print get_ans(s)


发表于 2018-07-19 22:25:09 回复(0)
#include<iostream>
#include<vector>
#include<string>
 
usingnamespacestd;
intmain(){
    string str;
    cin >> str;
    vector<int> sizeSet;
    intsize=0;
    for(intk = 0; k < str.length()-1;k++){
        if(str[k] ^ str[k + 1]){
            size++;
        }
        else{
            sizeSet.push_back(size);
            size = 0;
        }
    }
    sizeSet.push_back(size);
    intmaxNumber = 0;
    for(intn = 0; n < sizeSet.size(); n++){
        maxNumber = maxNumber>sizeSet[n] ? maxNumber : sizeSet[n];
    }
    cout << maxNumber+1;
}
发表于 2018-07-12 10:52:16 回复(0)