E--围栏

E--围栏

时间: 1ms        内存:128M

描述:

一串连续字符被称作围栏当且仅当它由间隔的‘|’和‘-’组成。比如“|-|-|-|”或“|-|”(引号仅供说明)。注意“|-||-|”或者“--”不是围栏,因为每个都包含了两个或两个以上的相同连续字符。给你一个字符串,请找出它的最长的一个可以称作围栏的子串长度。

输入:

长度为n(0≤n≤50)的字符串s,s只包含‘| ’、‘-’字符,
有多组字符串,每个一行。

输出:

在一行中输出最长的围栏长度值。

示例输入:

|-
|||-||--|--|---|-||-|-|-|--||---||-||-||-|--||

示例输出:

2
8

提示:

参考答案(内存最优[920]):

#include <stdio.h>
#include <string.h>
int main()
{
	int len,i,j;
	char a[55];
	int index=1;
	int max=0;
	while(scanf("%s",a)!=EOF)
	{
		index=1;
		len=strlen(a);
		for(i=1;i<len;i++)
		{
			if(a[i]!=a[i-1])
				index++;
			if(max<index)
					max=index;
			if (a[i]==a[i-1])
					index=1;
		}
		printf("%d\n",max);
	}
	
	return 0;
}

参考答案(时间最优[0]):

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int pp(string s)
{
        int sum = 0;
        int l = s.length();
        int len = 1;
        for(int i = 1; i<l; i++)
        {
            if(s[i] !=s[i-1])
            {
                len ++;
                if(len > sum)
                {
                    sum = len;
                }
            }
            else

                len =1;

        }
        if(len > sum)
        {
            sum = len;
        }
        return sum;
}
int main()
{
    string s;
    while(cin>>s)
    {
        if(s.length()==0)
        cout<<0<<endl;
        else
        cout<<pp(s)<<endl;
    }

    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注