zoukankan      html  css  js  c++  java
  • FZU2122_又见LKity

    题目是说给你一个替换串和目标串。把一个长串中的所有的替换串替换为目标串而且不递归地替换。

    很简单,直接做一次KMP然后直接替换。

    注意替换后跳到替换串的尾部。

    注意大小写的问题。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define maxn 50550
    using namespace std;
    
    char s0[111],s1[111],s[maxn];
    int f[111],L;
    bool tag[maxn];
    int n,m;
    
    bool equal(char c1,char c2)
    {
        if (c1==c2) return true;
        if (c1>c2) swap(c1,c2);
        c1=c1-'A'+'a';
        if (c1==c2) return true;
        return false;
    }
    
    void getfail()
    {
        memset(f,0,sizeof f);
        f[1]=0;
        for (int i=2; s0[i]; i++)
        {
            int k=f[i-1];
            while (k && equal(s0[k+1],s0[i])==false) k=f[k];
            if (equal(s0[k+1],s0[i])) f[i]=k+1;
                else f[i]=0;
        }
    }
    
    void trans(char ss[])
    {
        for (int i=0; ss[i]; i++)
        {
            if (ss[i]>='A' && ss[i]<='Z') ss[i]=ss[i]-'A'+'a';
        }
    }
    
    int main()
    {
        while (gets(s0+1))
        {
            gets(s1+1),gets(s+1);
            getfail();
            L=strlen(s0+1);
            memset(tag,false,sizeof tag);
            int cur=0;
            for (int i=1; s[i]; i++)
            {
                if (equal(s0[cur+1],s[i])) cur++;
                else
                {
                    int k=f[cur];
                    while (k && equal(s0[k+1],s[i])==false) k=f[k];
                    if (equal(s0[k+1],s[i])) cur=k+1;
                        else cur=0;
                }
                if (cur==L)
                {
                    tag[i]=true;
                    cur=0;
                }
            }
            for (int i=1; s[i]; i++)
            {
                if (tag[i+L-1]==true)
                {
                    printf("%s",s1+1);
                    i=i+L-1;
                }
                else  printf("%c",s[i]);
            }
            printf("
    ");
        }
        return 0;
    }
    如有转载,请注明出处(http://www.cnblogs.com/lochan)
  • 相关阅读:
    javascript之奇淫技巧
    nodejs的某些api~(一)node的流2
    javascript Object的新方法
    nodejs的某些api~(一)node的流1
    商城作品简介
    Javascript设计模式之观察者模式
    HTML 5 canvas globalCompositeOperation 属性
    设计模式----单利模式
    Centos6.8 安装tomcat8.5.11
    eclipse使用maven tomcat插件部署无法关联源代码
  • 原文地址:https://www.cnblogs.com/lochan/p/3433937.html
Copyright © 2011-2022 走看看