zoukankan      html  css  js  c++  java
  • 最小和最大表示法

    int MinimumRepresentation(int *s, int l)    
    {    
        int i,j,k;  
        i=0;j=1;k=0;  
        while(i<l&&j<l)  
        {  
            k=0;  
            while(s[i+k]==s[j+k]&&k<l) k++;  
            if(k==l) return i;  
            if(s[i+k]>s[j+k])   
             if(i+k+1>j) i=i+k+1;  
             else i=j+1;  
            else if(j+k+1>i) j=j+k+1;  
            else  j=i+1;   
        }  
        if(i<l) return i;  
        else return j;  
    }
    
    void getFail(char* P, int* f)
    {
        int m=strlen(P);
        f[0] = 0;
        f[1] = 0;
        for(int i = 1; i < m; i++)
        {
            int j = f[i];
            while(j && P[i] != P[j])
            {
                j = f[j];
            }
            f[i + 1]=P[i]==P[j]?j+1:0;
        }
    }
    我们可以看到的是fail数组最后知道了fail[m]的结果,所以求重复子串的时候就是
    if(j==m) ans++,就行了
    int find(char* T, char*P, int*f)
    {
        int ans;
        int m = strlen(P);
        int temp=2*n;
        getFail(P, f);
        int j = 0;
        for(int i = 0; i < temp; i++)
        {
            while(j && P[j] != T[i])
            {
                j = f[j];
            }
            if(P[j] == T[i])
            {
                j++;
            }
            if(j == m)
            {
                if(i-m+1<n) ans=i-m+1;
                else return ans;
                //j=f[j-1];
                //i--;
            }
        }
        return ans;
    }
    
  • 相关阅读:
    MAX导致数据库超时
    mysql查询效率提高技巧
    微信回调报文解析, 获取请求体内容
    炖汤秘方
    首字母小写
    List分页
    HttpServletRequest通过InputStream获取参数
    github命令行
    mysql死锁
    分布式锁-redis
  • 原文地址:https://www.cnblogs.com/Heilce/p/7522870.html
Copyright © 2011-2022 走看看