B : DS串应用–串替换

简介: 这篇文章介绍了如何使用KMP算法在给定的主串中查找模式串的位置,并用替换串替换模式串的C++程序实现,仅考虑单次替换情况。

B : DS串应用–串替换

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 23     Solved: 17

Description

给出主串、模式串、替换串,用KMP算法找出模式串在主串的位置,然后用替换串的字符替换掉模式串

本题只考虑一处替换的情况,如果你想做的完美一些,能够实现多处替换那可能需要考虑模式串和替换串长度不一致的情况

Input

第一个输入t,表示有t个实例

第二行输入第1个实例的主串,第三行输入第1个实例的模式串,第四行输入第1个实例的替换串

以此类推

Output

第一行输出第1个实例的主串

第二行输出第1个实例的主串替换后结果,如果没有发生替换就输出主串原来的内容。

以此类推

Sample Input

4
aabbccdd
bb
ff
aaabbbccc
ddd
eee
abcdef
abc
ccccc
abcdef
abc
c

Sample Output

aabbccdd
aaffccdd
aaabbbccc
aaabbbccc
abcdef
cccccdef
abcdef
cdef

解题思路:KMP的具有高效字符串匹配优势。
在这里编写出KMP模板后,用KMP查找字符串b在a中位置,查找到后用string 的内置函数erase(位置,删除个数)来删掉,
然后用insert(位置,字符串)插入进去。

ac代码如下:

#include<iostream>
using namespace std;
int nextt[1000000];
void Get_next(string a)
{
    int i=0,k=-1;
    int len=a.length();
    nextt[0]=-1;
    while(i<len)
    {
        if(k==-1||a[i]==a[k])
        {
            i++,k++;
            nextt[i]=k;
        }
        else k=nextt[k];
    }
}
int KMP(string a,string b)
{
    int i=0,j=0;
    int len=a.length(),len1=b.length();
    Get_next(b);
    while(i<len&&j<len1)
    {
        if(j==-1||a[i]==b[j])i++,j++;
        else j=nextt[j];
    }
    if(j==len1)return i-j;
    else return -1;
}
int main()
{
    string a,b,c;
    int n;
    cin>>n;
    while(n--)
    {
        cin>>a>>b>>c;
        cout<<a<<endl;
        int m=KMP(a,b);
        if(m!=-1)
        {
            a.erase(m,b.length());
            a.insert(m,c);
        }
        cout<<a<<endl;
    }
    return 0;
}
相关文章
|
移动开发 JavaScript 小程序
uView LoadMore 加载更多
uView LoadMore 加载更多
188 0
idea快速生成get set 构造方法的快捷键
idea快速生成get set 构造方法的快捷键
544 0
|
9月前
|
搜索推荐 数据挖掘 BI
产品电子画册制作软件哪个好?排名前6的软件都在这里
简要评测Adobe InDesign、草料二维码、创客贴、样本云、云展网、名编辑6款常见的产品电子画册制作工具,让你在选择出更适合自己的工具
|
10月前
|
人工智能 数据可视化 API
自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践
本文介绍了使用HarmonyOS的Calendar Kit开发日程管理应用的过程。通过API 13版本,不仅实现了创建、查询、更新和删除日程等基础功能,还深入探索了权限请求、日历配置、事件添加及查询筛选等功能。实战项目中,开发了一个智能日程管理工具,具备可视化管理、模糊查询和智能提醒等特性。最终,作者总结了模块化开发的优势,并展望了未来加入语音助手和AI推荐功能的计划。
605 1
|
11月前
|
存储 安全 OLAP
AnalyticDB安全与合规:数据保护与访问控制
【10月更文挑战第25天】在当今数据驱动的时代,数据的安全性和合规性成为了企业关注的重点。AnalyticDB(ADB)作为阿里云推出的一款高性能实时数据仓库服务,提供了丰富的安全特性来保护数据。作为一名长期使用AnalyticDB的数据工程师,我深知加强数据安全的重要性。本文将从我个人的角度出发,分享如何通过数据加密、访问控制和审计日志等手段加强AnalyticDB的安全性,确保数据的安全性和合规性。
212 2
|
算法 Java
【Java】Java基础飞机大战小游戏完整代码
【Java】Java基础飞机大战小游戏完整代码
709 0
|
人工智能 JSON API
HarmonyOS学习路之开发篇—AI功能开发(语音识别)
语音识别功能提供面向移动终端的语音识别能力。它基于华为智慧引擎(HUAWEI HiAI Engine)中的语音识别引擎,向开发者提供人工智能应用层API。该技术可以将语音文件、实时语音数据流转换为汉字序列,准确率达到90%以上(本地识别95%)。
|
存储 JavaScript 安全
深入理解与应用:在Web框架中高效管理环境变量
【7月更文挑战第3天】本文阐述了在Web开发中使用环境变量的重要性,如增强安全性和灵活性,并以Django、Flask和Express为例展示了如何管理这些变量。通过`os.environ`或特定库,开发者可以从环境中读取配置,避免敏感信息硬编码。最佳实践包括最小权限、加密、默认值、文档化和环境隔离,确保项目安全和易维护。
231 0
|
JavaScript
jquery在光标位置插入内容指定内容(input、textarea)通用
jquery在光标位置插入内容指定内容(input、textarea)通用
122 0
问题 B: DS哈希查找—二次探测再散列(关键字互不相同
问题 B: DS哈希查找—二次探测再散列(关键字互不相同
193 0