FZU 2122(KMP)

/*FZU 2122(简单字符串匹配,KMP算法)
题目大意:
就是给你3个字符串,第一个是模式串(用该串在文本串中去查找与之相同的串)即子串,
第二个字符串是去替换在文本串(即主串)已找到相同的子串,从而最后输出产生的新串,
如果没有找到,就原样输出文本串(即主串),第三个字符串就是文本串(即主串)

个人解题思想:
就是用KMP算法找到子串在主串中的位置,然后首先用相同字符“~”去替换主串中找到的子串;
运行产生的效果如下:
输入:
abc
bc ab
aaa aaabca 333Abcc##
输出:
aaa aa~~~a 333~~~c##
再用一个for循环去扫描,如果出现‘~’,就立即输出需要替换上去的字符串,同时i=i+l2(l2为子串的长度);
最终输出结果:
输入:
abc
bc ab
输出:
aaa aabc aba 333bc abc##
*/
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
# include<cstdlib>
# include<string>
# include<cmath>
using namespace std;
int next[108];
char p[108];
char s[50008];
char s1[1009];
int l1,l2,l3;
int i,j;
int ans;
void getnext()//KMP固定模板算法求next数组,这是KMP算法的核心
{
    next[0]=-1;
    int i=0;
    int h=-1;
    while(i<l2)
    {
        if(h==-1||p[i]==p[h]||p[i]+32==p[h]||p[i]==32+p[i])//这里需注意大写小写都有为了统一全都变成小写
        {
            i++;
            h++;
            next[i]=h;
        }
        else
            h=next[h];
   }
}
void kmp(int n)//KMP函数
{
    i=n,j=0;
    while(i<l1&&j<l2)
    {
        if(j==-1||s[i]==p[j]||p[j]+32==s[i]||p[j]-32==s[i])//同上
        {
            i++;
            j++;
        }
        else
            j=next[j];
        if(j==l2)
        {
            ans=i-l2;
            for(i=ans;i<ans+l2;i++)
            {
                s[i]='~';//!!!!此处需要注意,该字符不能随便取,应取ASCII在[32,125]区间外的
                         //表示刚开始没看清题目,以为随便取,就取了‘*’结果WA 15次痛心呀,后来改成‘~’(ASCII为126)就AC了
            }
            j=next[j];
        }
    }

}
int main()
{
   while(gets(p))
   {
       gets(s1);
       gets(s);
       l1=strlen(s);
       l2=strlen(p);
       getnext();
       kmp(0);
       for(i=0;i<l1;)
       {
           if(s[i]=='~') {printf("%s",s1);i+=l2;}
           else 
            {
                cout<<s[i];
                i++;
            }
       }
       cout<<endl;
   }
    return 0;
}
/*
体会:
虽然这道题WA 15次 但是最后还是被我弄明白了,感觉还是不错的。故此下次一定要看清题目
*/

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊喵先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值