现在的位置: 首页 > 综合 > 正文

hdu 2668

2018年12月31日 ⁄ 综合 ⁄ 共 486字 ⁄ 字号 评论关闭

每次记录一个区间长度,当新加入的字符与它相等的最近字符的位置小于区间起点时,区间长度加1。

则更新区间,遍历一遍找到最大区间





#include<stdio.h>
#include<string.h>
int n,mark[150];
char str[10000010];
int main()
{
	int i,x,len,ss,llen;
	while(scanf("%d",&n)!=-1)
	{
		memset(mark,-1,sizeof(mark));//记录字符出现的位置
		scanf("%s",str);
		len=llen=0;x=ss=0;
		for(i=0;i<n;i++)
		{
			if(mark[str[i]]<ss)//如果字符上次出现的位置在区间外,区间+1
				llen++;
			else
			{				
				if(llen>len)//更新最大区间
				{	
					len=llen;
					x=ss;
				}
				ss=mark[str[i]]+1;//新起点
				llen=i-ss+1;//新区间长度
				
			}
			mark[str[i]]=i;
		}
		if(llen>len)
		{	
			len=llen;
			x=ss;
		}
		printf("%d %d %d\n",len,x,x+len-1);
	}
}
【上篇】
【下篇】

抱歉!评论已关闭.