程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2668

hdu 2668

編輯:C++入門知識

每次記錄一個區間長度,當新加入的字符與它相等的最近字符的位置小於區間起點時,區間長度加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);
	}
}

 

 

 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved