• 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)
  • 相关阅读:
    Docker化高可用redis集群
    机器学习理论研究方法探讨
    (转载)iOS系统Crash文件分析方法
    ios 学习总结之动画(转)
    (转)iOS sqlite :truncate/delete/drop区分
    (转载)自定义 setDateFormat 显示格式
    (转载)IOS中UIScrollView的属性和委托方法
    vue 实现分页加载数据
    深入理解JQuery插件开发
    博客迁移到GitCafe
  • 原文地址:https://www.cnblogs.com/lochan/p/3433937.html
Copyright © 2020-2023  润新知