【PTA数据结构 | C语言版】字符串匹配算法比较

数据结构PTA title: 曲师大计院20级的PTA categories: - 数据结构 tags: - PTA toc: true 第一章 绪论 判断题 1-1 数据元素是数据的最小单位。F(数据项) 1-2 数据的逻辑结构是指数据的各数据项之间的逻辑关系。F(数据元素之间) 1-3 数据结构概念包括数据之间的逻辑结构、数据在计算机中的存储方式和数据的运算三个方面。T 1-4 数据结构的抽象操作的定义与具体实现有关。F 1-5 算法和程序没有区别,在数据结构中二者是通用的。F 1. 阅读详情

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

题目

给定两个由英文字母组成的字符串 string 和 pattern,要求找到 pattern 在 string 中第一次出现的位置,并将此位置后的 string 的子串输出。如果找不到,则输出“Not Found”。

本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:

  • 数据0:小规模字符串,测试基本正确性;
  • 数据1:随机数据,String 长度为 10^5,Pattern 长度为 10;
  • 数据2:随机数据,String 长度为 10^5,Pattern 长度为 10^2;
  • 数据3:随机数据,String 长度为 10^5,Pattern 长度为 10^3;
  • 数据4:随机数据,String 长度为 10^5,Pattern 长度为 10^4;
  • 数据5:String 长度为 10^6,Pattern 长度为 10^5;测试尾字符不匹配的情形;
  • 数据6:String 长度为 10^6 ,Pattern 长度为 10^5;测试首字符不匹配的情形。

输入格式:
输入第一行给出 string,为由英文字母组成的、长度不超过 10^6 的字符串。第二行给出一个正整数 n(≤10),为待匹配的模式串的个数。随后 n 行,每行给出一个 pattern,为由英文字母组成的、长度不超过 10^5 的字符串。每个字符串都非空,以回车结束。

输出格式:
对每个 pattern,按照题面要求输出匹配结果。

输入样例:
abcabcabcabcacabxy
3
abcabcacab
cabcabcd
abcabcabcabcacabxyz

输出样例:
abcabcacabxy
Not Found
Not Found

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int la, lb;                 // 主串和模式串的长度
int next[1000001];          // KMP算法的next数组
char a[1000001], b[1000001]; // 主串和模式串(下标从1开始)

// 计算模式串的next数组(部分匹配表)
void Next() {
    int i, j = 0;
    for (i = 2; i <= lb; i++) {
        // 不匹配时回溯到上一个可能位置
        while (j > 0 && b[i] != b[j + 1]) {
            j = next[j];
        }
        if (b[i] == b[j + 1])
            j++;
        next[i] = j;
    }
}

// KMP算法实现:在主串a中查找模式串b的首次出现
int KMP(char a[], char b[]) {
    int j = 0, t = 0, l = -1; // l=-1表示未找到匹配
    for (int i = 1; i <= la; i++) {
        // 不匹配时回溯到next数组指示的位置
        while (j > 0 && b[j + 1] != a[i]) {
            j = next[j];
        }
        if (b[j + 1] == a[i])
            j++;
        // 找到完整匹配
        if (j == lb) {
            t = i - lb + 1; // 记录匹配起始位置
            l = 0;          // 标记已找到
            break;
        }
    }
    // 输出匹配位置后的子串
    if (l == 0) {
        for (; t <= la; t++) {
            printf("%c", a[t]);
        }
    }
    return l; // 返回是否找到的标志
}

int main() {
    scanf("%s", a + 1);       // 主串从下标1开始存储
    la = strlen(a + 1);       // 计算主串长度
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%s", b + 1);   // 模式串从下标1开始存储
        lb = strlen(b + 1);   // 计算模式串长度
        Next();               // 预处理next数组
        int m = KMP(a, b);    // 执行KMP匹配
        if (m == -1)
            printf("Not Found");
        if (i != n - 1)       // 最后一个结果后不输出额外换行
            printf("\n");
    }
}
别只刷LeetCode了!用PTA的‘德才论’和‘福尔摩斯约会’真题,聊聊C语言如何玩转字符串和结构体排序 本文通过PTA平台上的'德才论'和'福尔摩斯约会'两道经典题目,深入解析C语言中字符串处理与结构体排序的实战技巧。文章详细讲解了多关键字排序和复杂字符串匹配的实现方法,并分享了防御性编程和代码优化的实用建议,帮助开发者提升C语言工程化能力。 阅读详情

相关推荐

PTA_C语言编程实验:有序数组插入与符号匹配

在当今的IT行业中,PTA(Programming Teaching Assistant)平台被广泛应用于编程教育和技能提升。PTA平台作为一种辅助教学和自我练习的工具,它通过在线编程题库和自动评测系统,为程序员和学生提供了实时反馈和实践机会,有助于提升解题和编程能力。PTA平台的核心优势在于能够提供大量的编程练习题,并即时给出结果反馈。这种及时性不仅缩短了学习周期,还提高了学习效率。此外,PTA通常还支持多语言编程,如C/C++、Java、Python等,满足不同开发者的需求。

weixin_31163455的博客 1068

7-1 串的模式匹配 (KMP算法)

7-1串的模式匹配(100分) 给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下: 数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为10​5​​,Pattern 长度为10; 数据2:随机数据,String 长度为10​...

kiss_my_face的博客 5179

解决WSL2网络隔离:Ubuntu子系统共享Windows代理的3种方法

本文详细解析了WSL2的网络隔离特性,并提供了三种在Ubuntu子系统中共享Windows代理的实用方法:环境变量法、配置文件法和系统服务法。通过具体代码示例和方案对比,帮助开发者快速解决WSL2网络访问问题,实现一键设置代理,提升开发效率。

weixin_29295541的博客 450

PAT 串的模式匹配

strstr()和kmp算法的优劣

moge的博客 1526

485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。      部分原理图如下,上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。1.把R10和R16改为1k,示波器C...

qq_26308521的博客 1万+

RWEQ土壤风蚀模型的估算与变化归因分析

本次以介绍RWEQ模型的基本原理及数据需求,再结合案例讲解RWEQ模型中区域地理空间数据库构建的方法和各个参量提取的原理与方法,最后结合典型案例进行综合讲解风蚀模数估算、制图及归因分析。空间分析与制图:提取分析、局部分析、邻域分析、区域分析、插值分析、平滑处理、像元提取、采样与重采样。以某实际应用为案例,掌握RWEQ模型进行当地土壤风蚀量空间分布分析整体流程。地图服务器、在线地图、范围指示器、格网、表格、基础地图服务使用规则介绍。掌握土壤风蚀模型的原理、优势点及因子组成。

2301_77413856的博客 1194

KMP 串的模式匹配

KMP 串的模式匹配 来自:PTA_数据结构_KMP 串的模式匹配 给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下: 输入格式: 输入第一行给出 String,为由英文字母组成的、长度不超过 10^6 的字符串。第二行给出一个正整数 N(≤10),为待匹配的模式串的

王寒寒的博客 764

【国民技术N32项目移植】基于 Windows 的 ARM GCC 开发环境

【国民技术N32项目移植】基于 Windows 的 ARM GCC 开发环境

weixin_42150032的博客 1361

KMP字符串匹配

KMP字符串匹配 给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下: 数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为...

庾信平生最萧瑟 493

小工匠聊架构-分布式场景下的并发幂等性常见的解决方案

Pre 我们来回顾下单体时代 单体时代,应用部署在一台主机上,可以使用JVM级别的锁来控制并发请求 。 随着应用规模的不断扩大,集群化或者微服务化的分布式部署越来越普及,每个应用都是一个单独的JVM应用,所以单体时代的这种处理方式已经无法满足当前架构下的业务需求了。 JVM级别的锁已经无法满足跨进程之间访问控制了,进而演化出来了分布式锁。 分布式锁 能否解决幂等性问题? 分布式锁解决什么问题? 简言之: 解决跨进程间无法共享本地资源的问题 ,解决的是分布式场景下并发访问的问题。 为什么需要确保并发.

小工匠 2万+

2️⃣ Coze创建智能体教学(2025年全新版本)

扣子平台提供强大支持,可将智能体轻松集成至各类社交平台,使智能体得以服务更为庞大的用户群体。当下支持集成的平台如下:​1️⃣豆包:作为聚焦 AI 内容创作的平台,非常适合发布充满创意、娱乐性强的智能体。​2️⃣飞书:适合发布用于办公协作的智能体,助力团队提升工作效率。​3️⃣微信:借助公众号或小程序的形式,能够服务海量微信用户。​4️⃣抖音:适合发布与短视频相关的智能体,为用户提供创意与娱乐服务。​

李同学Lino的博客 4576

算法题--字符串的模式匹配

字符串的模式匹配是一个非常经典的问题,想必你一定掌握了这个问题的求解原理。接下来,就是你大展身手的好机会!给定两个由英文字母组成的字符串。每个字符串都非空,以回车结束。中第一次出现的位置,并将此位置后的。,为待匹配的模式串的个数。第二行输入一个正整数。如果找不到,则输出“,为由英文字母组成的、长度不超过。,为由英文字母组成的、长度不超过。,按照题面要求输出匹配结果。

m0_74626628的博客 564

微信小程序- 云开发上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。(小程序上传部署云函数提示错误,开发控制台中的云函数没有删除,详细排查)

微信小程序——云函数上传失败,微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。微信小程序上传云函数失败,微信小程序云开发|Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。微信云开发报错(Error: ResourceNotFound.FunctionName,微信小程序云函数报错,上传云函数 sum 失败 Error:,上传部署我们的云函数 2. 报错 错误信息

🏆 前端领域优质创作者 4315

【PTA数据结构 | C语言版】字符串匹配算法

请编写程序,得到模式串 t 在主串 s 中首次出现的位置。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性;数据1:随机数据,String 长度为 10^5,Pattern 长度为 10;数据2:随机数据,String 长度为 10^5,Pattern 长度为 10^2;数据3:随机数据,String 长度为 10^5,Pattern 长度为 10^3;

等风来 688

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

PTA-数据结构字符串与数组|C语言版

PTA实验字符串与数组C语言版

m0_62294708的博客 1413

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PTA数据结构与算法-第四章——字符串

文章目录第一章——褚论第二章——线性表第三章——栈与队列第四章——字符串判断题单选题 第一章——褚论 第二章——线性表 第三章——栈与队列 第四章——字符串 判断题 1-10 如果strcmp(s1,s2)返回的结果为0,表示字符串s1和s2不相同。 F 当s1<s2时,返回值<0; 当s1=s2时,返回值=0; 当s1>s2时,返回值>0; 1-4 假设模式串是abababaab,则KMP模式匹配算法中的next[j] = 0 1 1 2 3 4 5 6 2。 next

Eumenides_Suki的博客 6831

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言版数据结构与算法pta合集:7-3 括号匹配

本题目要求读入n个字符串,每个字符串是一个括号序列,如“{[()]}”,然后判断每个括号序列是否匹配。

我就知道你会来,我们一起进步吧! 2117

【PTA】【数据结构与算法】串与KMP算法

判断题 1.假设模式串是abababaab,则KMP模式匹配算法中的next[j] = 0 1 1 2 3 4 5 6 2。 T F 选择题 1.在用KMP算法进行模式匹配时,模式串“ababaaababaa”的next数组值为____。 选项 A -1,0,1,2,3,4,5,6,7,8,9,9 B -1,0,1,2,1,2,1,1,1,1,2,1 C -...

葑鈊丶 1万+

PTA-21级数据结构与算法实验4——字符串和数组

21级数据结构与算法实验4——字符串和数组(参考答案)C语言实现

m0_63485942的博客 4014

pta算法题目讲解:括号匹配

经由栈结构赋能,这一代码方案举重若轻化解括号匹配难题,不仅精准核验匹配完整性,更将嵌套顺序难题悄然化解于无形。无需繁琐流程追踪嵌套细节,只需聚焦括号进出栈瞬间,匹配真谛已然紧握在手。此般优雅解法,正是算法与数据结构精妙融合的魅力彰显,为我们处理复杂字符串逻辑点亮一盏明灯,指引通往高效编程的通途。祝所有小伙伴学有所成!!有任何想法,欢迎评论区留言讨论哦~

Huazzi的博客 728

数据结构实验|PTA|栈操作|实验二 括号匹配判断算法

数据结构实验|PTA|栈操作|实验二 括号匹配判断算法题目算法分析基本思路:关于栈的基本建立源代码 题目 实验二 括号匹配判断算法 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4428 Accepted: 1693 Description 假设在表达式中([]())或[([ ][ ])]等为正确的格式,[( ])或([( ))或 (( )])均为不正确的格式。基于栈设计一个判断括号是否正确匹配的算法。 Input 输入数据有多组,

niwad的博客 2210

sdut-数据结构与算法pta-字符串和数组

给定一个字符串 text 和一个模式串 pattern,求 pattern 在text 中的出现次数。text 和 pattern 中的字符均为英语大写字母或小写字母。text中不同位置出现的pattern 可重叠。输入共两行,分别是字符串text 和模式串pattern。输出一个整数,表示 pattern 在 text 中的出现次数。33。

2302_81657110的博客 728

PTA乙级 PAT (Basic Level) Practice C语言(完结)

PTA乙级习题1001 害死人不偿命的(3n+1)猜想1002 写出这个数1003 我要通过!1004 成绩排名1005 继续(3n+1)猜想1006 换个格式输出整数1007 素数对猜想1008 数组元素循环右移问题1009 说反话 链接 PTA乙级 1001 害死人不偿命的(3n+1)猜想 #include<stdio.h> #include<stdlib.h> int main(){ int n; if(scanf("%d",&n)){} int

weixin_46720804的博客 6578

PTA C++题库解析与算法优化实践

数据结构与算法是计算机科学的核心基础,其中二分查找、树状数组等经典算法在编程竞赛和工程实践中广泛应用。通过合理设计数据库结构和索引策略,可以实现题目数据的高效存储与检索,这在教学题库系统等场景中尤为重要。以PTA C++题库为例,采用MongoDB存储半结构化题目数据,并为高频查询字段建立索引,能显著提升系统性能。在算法实现层面,正确处理边界条件和优化时间复杂度是关键,例如二分查找采用左闭右开区间防止溢出,树状数组支持高效的区间更新操作。这些技术不仅适用于编程题目解答,也能直接应用于实际软件开发中的性能敏感

weixin_30570101的博客 322

PTA 串的模式匹配

给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下: 数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为 10​5​​,Patter...

qq_45405490的博客 1484
上一篇: 【PTA数据结构 | C语言版】字符串替换算法
下一篇: 【PTA数据结构 | C语言版】剪切粘贴
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

秋说

感谢打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值