文章标题

来源:互联网 发布:打电话通话变音软件 编辑:程序博客网 时间:2024/06/10 23:16
class Solution {public:    int lengthOfLongestSubstring(string s) {        int size = s.size();        string s1(s);        int **p = new int*[size+1];        for(int i=0;i<size+1;i++)            p[i] = new int[size+1];        for(int i=0;i<size+1;i++)        {            p[0][i]=0;            p[i][0]=0;        }//init        for(int i=1;i<size+1;i++)        {            for(int j=1;j<size+1;j++)            {                if(s1[i]==s[j])                {                    if(p[i-1][j-1]>0)//                    {                        if(is_inline(p[i],j)||is_inline(p[j],i))                            p[i][j]=1;                        else                            p[i][j]=p[i-1][j-1]+1;                    }                    else                    {                        p[i][j]=1;                    }                }                else                    p[i][j]=0;            }        }        int max=0;        for(int i=1;i<size+1;i++)            for(int j=1;j<size+1;j++)                if(p[i][j]>max)                    max=p[i][j];        delete[]p;        return max;    }    bool is_inline(int in[],int pos)    {        for(int i=0;i<pos;i++)            if(in[i]!=0)                return true;        return false;    }};
class Solution {public:    int lengthOfLongestSubstring(string s) {        int len = s.size();        //if(len>1000)        //    return 0;        int *p = new int[len];         int max = 0;       // for(int k=0;k<len;k++)       // {            for(int i=0;i<len;i++)                p[i]=0;            p[0]=1;            for(int i=0+1;i<len;i++)            {                IsRep(i,p,s,&max);                p[i] = p[i-1]+1;            }            for(int i=0;i<len;i++)                if(max<p[i])                    max = p[i];            //return max;       //}        delete[]p;        return max;    }    bool IsRep(int i,int p[],string s,int *m)    {        int k = i-1;        int tims = 0;        while(tims<p[i-1])        {            tims++;            if(s[k]==s[i])            {                if(*m<p[i-1])                    *m = p[i-1];                int x=1;                p[k]=0;                for(int n=k+1;n<i;n++)                    p[n] = x++;                return true;            }            else                k--;        }        return false;    }};
0 0
原创粉丝点击