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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。