AcWing 2816. 判断子序列

文章目录

  • AcWing 2816. 判断子序列
  • 我的思路
    • CODE
  • 欣赏大神代码
  • 给点思考


AcWing 2816. 判断子序列

题目链接:https://www.acwing.com/activity/content/problem/content/2981/

描述


我的思路

  • 直接硬套模版,把两个指针两层循环写上
  • 如果匹配,记录数组更新
  • 遍历记录数组,如果有未标记的值,说明非子串

CODE

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int n, m;
const int N = 1e5 + 10;
int a[N], b[N], cnt[N];int main()
{cin >> n >> m;for(int i = 0; i < n; ++i) scanf("%d", &a[i]);for(int i = 0; i < m; ++i) scanf("%d", &b[i]);for(int i = 0, j = 0; i < n; ++i){while(j < m && a[i] != b[j]){j++;}if(j < m && a[i] == b[j]){		// 这个判断中 j < m 非常必要cnt[i]++;j++;}}for(int i = 0; i < n; ++i){if(cnt[i] == 0){puts("No");return 0;}}puts("Yes");
}
  • j < m i f if if 判断中不可缺少,当我们走到b[]最后一位没有匹配成功时,j会自加到j == m,那么b[j] == 0,是数组越界后的第一位'\0',如果a[i] == 0那么就会匹配成功,尤其是在最后一位时

欣赏大神代码

#include <iostream>
#include <cstring>using namespace std;const int N = 100010;int n, m;
int a[N], b[N];int main()
{scanf("%d%d", &n, &m);for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);for (int i = 0; i < m; i ++ ) scanf("%d", &b[i]);int i = 0, j = 0;while (i < n && j < m){if (a[i] == b[j]) i ++ ;j ++ ;}if (i == n) puts("Yes");else puts("No");return 0;
}作者:yxc
链接:https://www.acwing.com/activity/content/code/content/589289/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 简洁优雅
  • 舍弃了生搬硬套模板,只用一重循环,匹配成功指针就走,未成功则不动,最后看有没有到结尾,没用到标记数组,太太太elegant

给点思考

  • 对于这种寻不连续串,像这样一重循环就能搞定
  • 而对于寻连续串,还得用板子来锁定串的左右边界,例如洛谷P1449 后缀表达式、AcWing 3302. 表达式求值,这两个表达式求值题目中在字符串中寻找连续的数字串,还是用的板子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果手机怎么卸载微信?记得掌握这两种方法!

微信是一款社交应用程序&#xff0c;在聊天过程中&#xff0c;我们会经常发送和接收各种形式的信息。随着时间的推移&#xff0c;微信缓存的文件会越来越多&#xff0c;占用的存储空间也会逐渐增加。 卸载微信可以释放手机内存&#xff0c;提高手机的运行速度。那么&#xff0…

Python 分解IP段获取所有IP(子网掩码)

需求 192.168.1.0/24,192.168.2.1-192.168.2.254,192.168.3.3 IP段格式已 "," 分割&#xff0c;获取所有IP 注意 1. 判断 IP 是否合规 2. 去除多余的字符&#xff0c;例如空格、换行符 3. 去重 代码 import re import ipaddressdef isIP(ip):p re.compile(^((…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好&#xff0c;下面就来实现相应的功能&#xff0c;目前先针对自定义…

问答社区运营的核心是什么?

问答社区是用户在平台上获得信息的一种方式&#xff0c;一般问答社区适用于医疗行业&#xff0c;法律行业等专业领域的行业&#xff0c;可以划分为知识型分享社区的一种&#xff0c;用户提供提问&#xff0c;邀请回答&#xff0c;选择最佳回复&#xff0c;设置问题围观&#xf…

《微信小程序开发从入门到实战》学习三十六

4.2 云开发JSON数据库 4.2.6 云开发JSON数据库 在集合对象上调用add方法可以在集和中可以插入一条记录&#xff0c;代码如下&#xff1a; db.collection(testOne).add({ // 在JSON数据库的testOne集合中增加一个记录 data:{ name: "write paper" }, // 插入数据成功…

力扣2.两数相加

题目描述 把题读懂后&#xff0c;这道题存在两个需要解决的问题&#xff1a;1.进位问题&#xff1b;2.两个链表长度不一 代码 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建新链表的伪指针&#xff0c;指向链表的头结点ListNode prev n…

选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较

随着科技的飞速发展&#xff0c;工程设计领域对于高效、灵活的设计工具需求日益增加。SOLIDWORKS 作为一款广受欢迎的三维设计软件&#xff0c;提供了网络版和单机版两种选择。在本文中&#xff0c;我们将深入探讨这两个版本的区别&#xff0c;并为您详细介绍它们的价格差异。 …

如何通过Portal实现消息集成

在数字化时代浪潮下&#xff0c;信息的流通与交互已变得至关重要&#xff0c;不论是在企业内部日常协作&#xff0c;还是与外部客户的紧密沟通&#xff0c;信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

超实用电脑技巧分享,快速提高工作效率!

“我是个刚开始学习使用电脑的新手&#xff0c;想问问大家有什么比较好用的电脑使用技巧可以推荐一下吗&#xff1f;非常感谢&#xff01;” 在使用电脑时&#xff0c;如果我们适当掌握一些技巧&#xff0c;可以有效提高效率。那么&#xff0c;今天小编就给大家分享一些常见的电…

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意&#xff0c;普通空类也会占用 1 字节大小&#xff0c;因为普通空类可以实例化对象。 而 抽象空类占 4 字节&#xff08;32 位机中&#xff09;&#xff0c;因为抽象空类中含有虚指针&#xff08;含有虚函数的非抽象空类同理&am…

leetcode:455. 分发饼干

一、题目 原题链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;int findContentChildren(int* g, int gSize, int* s, int sSize) 二、思路 将胃口数组和饼干尺寸数组降序排序 遍历两个数组&#xff0c;从胃口数组中找到符合饼干尺…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可