• 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;
    }
    
    
    


  • 相关阅读:
    bat 笔记 一
    air 桌面应用发布后可以删除的文件
    as3 去掉字符串空白问题
    as3 air 获取文件夹下的所有文件
    egret 配置设置
    egret 精简游戏项目
    starling 第一天
    《笨办法学Python》 第2课手记
    《笨办法学Python》 第1课手记
    《笨办法学Python》 第0课手记
  • 原文地址:https://www.cnblogs.com/csnd/p/12062379.html
Copyright © 2020-2023  润新知