Hdoj 2668 Daydream

来源:互联网 发布:impress.js demo 编辑:程序博客网 时间:2024/05/29 03:03

Hdoj 2668 Daydream

这里写图片描述
题目分析:最长不重复子串问题,数据规模较大,要求采用O(n)算法,用尺取法,定义两个指针,不断更新即可

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cctype>#include<cstring>#include<cstdlib>using namespace std;char str[10000010];int n;int mark[150];int main() {    int i,x,len,st,temp;    while(cin>>n)    {        memset(mark,-1,sizeof(mark));//记录字符出现的位置        scanf("%s",str);        len=temp=0;x=st=0;        for(i=0;i<n;i++)        {            if(mark[str[i]]<st)//如果字符上次出现的位置不在区间内,则区间+1                temp++;            else            {                               if(temp>len)                {                       len=temp;                    x=st;                }                st=mark[str[i]]+1;//新起点                temp=i-st+1;//新的区间长度            }            mark[str[i]]=i;        }        if(temp>len)        {               len=temp;            x=st;        }  //此时可能还有数据,最后一次判断         printf("%d %d %d\n",len,x,x+len-1);    }    return 0;}