• POJ2752KMP逆序处理


    题意:
         给你一个串,问你都哪些位置即使前缀又是后缀。


    思路:

         可以用KMP来做,尝试过很多种方法,想把两个串接起来然后..失败,后来又想可以倒着匹配,就是把整个串倒过来..失败,说下第三种也是成功的方法,就是正常匹配,然后找到最后一个的next,如果是0,那么就不用找了,否则里面的数值是答案,然后再找next对应的那个数值,一直找到0,最后记得把总长度加上,正确性可以这么想,从后往前找保证是后缀,不是0保证当前失配不用返回起点也就是当前是当前是某个和前缀相同但不是前缀的字符串的最后一个字母。


    #include<stdio.h>
    #include<string.h>
    
    char str[400005];
    int next[400005];
    int  ans[400005];
    
    void Get_Next(int m)
    {
        int j = 0 ,k = -1;
        next[0] = -1;
        while(j < m)
        {
            if(k == -1 || str[j] == str[k])
            next[++j] = ++k;
            else k = next[k];
        }
        return ;
    }
    
    int main ()
    {
        int m ,i;
        while(~scanf("%s" ,str))
        {
            m = strlen(str);
            Get_Next(m);
            int id = m;
            i = 0;
            while(next[id])
            {
                ans[++i] = next[id];
                id = next[id];
            }
            ans[0] = m;
            m = i;
            for(i = m ;i >= 0 ;i --)
            {
                if(!i) printf("%d
    " ,ans[i]);
                else printf("%d " ,ans[i]);
            }
        }
        return 0;
    }
    
    
    


  • 相关阅读:
    数据库应用-java+sqlserver(十)StuInfo
    数据库应用-java+sqlserver(九)StudentMain和StudentManager
    数据库应用-java+sqlserver(八)StoreScore
    数据库应用-java+sqlserver(七)SqlManager
    小学期学习总结二
    小学期学习总结一
    四则运算小程序
    第二小组第七周学习心得
    需求分析
    MSF
  • 原文地址:https://www.cnblogs.com/csnd/p/12062378.html
Copyright © 2020-2023  润新知