等值子串(串)

等值子串(串)

时间: 1ms        内存:128M

描述:

如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。试设计一算法,输入字符串S,以“!”作为结束标志。如果串S中不存在等值子串,则输出信息“无等值子串”,否则求出(输出)一个长度最大的等值子串。

输入:

输入字符串s

输出:

找出其中长度最大的等值子串

示例输入:

asdf123!

示例输出:

无等值子串

提示:

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

#include <stdio.h>
#include <string.h>


int main()
{
	char cc[100];
	int flag[100];
	int n,t=1,i,j;
    
	for(i=0;i<100;i++)
		flag[i]=1;
	scanf("%s",cc);
	n=strlen(cc);
	for(i=1;i<n;i++)
	{
		if(cc[i-1]==cc[i])
			flag[i]=flag[i-1]+1;
	}
	for(i=0;i<n;i++)
		if(flag[i]>t)
		{
			t=flag[i];
			j=i;
		}
	if(t==1)
		printf("无等值子串");
	else
	{
		for(i=j-t+1;i<=j;i++)
			printf("%c",cc[i]);
	}
	return 0;
}

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

#include <stdio.h>
#include <string.h>


int main()
{
	char cc[100];
	int flag[100];
	int n,t=1,i,j;
    
	for(i=0;i<100;i++)
		flag[i]=1;
	scanf("%s",cc);
	n=strlen(cc);
	for(i=1;i<n;i++)
	{
		if(cc[i-1]==cc[i])
			flag[i]=flag[i-1]+1;
	}
	for(i=0;i<n;i++)
		if(flag[i]>t)
		{
			t=flag[i];
			j=i;
		}
	if(t==1)
		printf("无等值子串");
	else
	{
		for(i=j-t+1;i<=j;i++)
			printf("%c",cc[i]);
	}
	return 0;
}

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

点赞

发表评论

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