【NC23053】月月查华华的手机

2024-03-17 13:12
文章标签 手机 华华 nc23053

本文主要是介绍【NC23053】月月查华华的手机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

月月查华华的手机

子序列判断,双指针

思路

将题目翻译一下:

给你一个字符串 s s s,然后给定 m m m 个字符串的询问,每次询问判断给定的字符串 t t t 是否是 s s s 的子序列。

判断子序列的话,按理来说应该比判断子串更简单(在不使用库函数的情况下),因为判断子串需要用到 KMP 算法来优化才能过。那么判断子序列为什么简单呢?

因为判断子序列可以用时间复杂度为 O ( n + m ) O(n+m) O(n+m) 的天然算法解决,而子串不行(子串的天然算法是 O ( n m ) O(nm) O(nm) 的暴力算法。

那判断子序列的天然算法是什么?

双指针,这里给出伪代码,还是很容易理解的:

// 假设主串是 s, 子串是 t
slen = s.length
tlen = t.length
i = 0, j = 0
while i < slen && j < tlen:while i < slen && s[i] != t[j]:i = i + 1if i == slen:// 找完了也没找到,不是子序列report t is not s's subsequenceelse:j = j + 1i = i + 1 // 思考一下为什么 i 也要加1

代码

#include <stdio.h>#define N 1000005/*** @brief 求字符串 name 是否是 s 的子序列** @param s 主串* @param name 子串* @return int 返回 0 代表不是,否则代表是*/
int is_subseq(const char* s, const char* name) {int i = 0, j = 0;while (s[i] && name[j]) {while (s[i] && s[i] != name[j]) i++;if (!s[i]) return 0;j++;i++;}return !name[j];
}int main(void) {// 华华的昵称char s[N];// 推荐好友个数int n;// 每个好友的昵称char name[N];scanf("%s%d", s, &n);while (n--) {scanf("%s", name);printf("%s\n", is_subseq(s, name) ? "Yes" : "No");}return 0;
}

其他

简单地做一下复杂度的分析,由于有 m m m 组询问,所以时间复杂度一定要乘以一个 m m m,每次询问花费的时间复杂度为两个字符串的长度 O ( n + k ) O(n+k) O(n+k),所以最终的时间复杂度为 O ( m ( n + k ) ) O(m(n+k)) O(m(n+k)),可以近似地看作是 O ( m n ) O(mn) O(mn) 的。

也有预处理的算法,即先预处理主串的字符成一个表, m m m 次询问就只需要查表即可,不过该算法也需要 O ( m k ) O(mk) O(mk) 的时间复杂度,与本文记录的算法相比优化不是很大,这里不做记录。

当然还有其他更高级(复杂)的算法。

这篇关于【NC23053】月月查华华的手机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819064

相关文章

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户: 在OPPO手机中格式化存储卡后可以恢复图片吗?我删除了 OPPO上的视频和图片,我感觉很糟糕,因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的照片吗?我不小心格式化了OPPO SD 卡,有希望恢复已删除的照片吗? 救命!我在清理时删除了我的照片,我的问题是是否有任何免费软件可以从OPPO中恢复已

P11019 「LAOI-6」[太阳]] 请使用最新版手机 QQ 体验新功能

English statement. You must submit your code at the Chinese version of the statement. 题目描述 你的 QQ 收到了一条新消息!但是你很生气,因为你看不到别人在手机 QQ 上发送的超级表情。 消息形如一个字符串 S,包含且仅包含一个超级表情。具体地,我们将 S 的拼音采用驼峰命名法,可以化为如下形

手机扬声器音量总是不够大?试试“扬声器助推器”吧

手机的扬声器音量总是不够大,尤其是在嘈杂的环境中,音乐和视频的声音总是不太清晰。直到我发现了这款“扬声器助推器”,我的手机音质瞬间提升了好几个档次。 软件简介: “扬声器助推器”利用先进的音频处理技术,能够提高手机扬声器的音量,让声音更加清晰响亮。此外,还可以设置最大允许增强量,避免音量过大损坏扬声器。 版本特点: 提升音量效果显著,音质清晰。可以自定义最大增强量,保护扬声器。 使用体

用手机做抢答器 低预算知识竞赛活动的选择

使用手机作为抢答器是低预算竞赛活动的一个理想选择。随着智能手机的普及,传统抢答器已经被手机抢答器所替代,这种转变不仅降低了成本,而且提供了更大的灵活性和便利性。通过手机扫码登录竞赛软件,参赛者可以直接在手机上进行抢答和答题,这种方式无需购买软件,只需要一台能上网的电脑连接大屏即可。知识竞赛在线租用系统通常包括后台管理、大屏展示、选手客户端三部分,通过租用方式使用系统,用户无需准备服务器硬件、相

Anroid BLE蓝牙(手机分别作为中心设备和外围设备)

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。  BLE蓝牙模块主要应用领域     1、移动扩展设备     2、汽车电子设备     3、健康医疗用品:心跳带、血压计等     4、定位应用:室内定位、井下定位等     5、近距离数据采集:无线

使用Charles对安卓手机进行抓包

写在前面的话 Charles 介绍 Charles 的主要功能 网络请求拦截与分析 Charles 通过将自己配置成系统的代理服务器,拦截所有通过它的 HTTP 和 HTTPS 请求与响应。开发者可以查看每个网络请求的详细信息,包括请求的 URL、请求头、请求体、响应头、响应体、状态码等,便于调试和分析网络通信问题。 SSL 抓包 Charles 支持 HTTPS 协议的抓包。通过安装

怎样将手机屏幕(远程)投屏到家里的大电视上?

我不住家里,前几次回去都会替老爸老妈清理手机。这两个星期没空回去,老爸吐槽手机用几天就又卡了,其实就是清理一些手机缓存的问题。 我说我远程控制他的手机,给他清理一下。他一听“控制”就不喜欢,说我大了,不尊重他,然后又把几件陈年小事又唠叨一遍。我只能顺着他意,不再提远程控制手机的方法。其实我也不懂,他愿意直接把手机给我操作,但不愿意被远程控制。我也只能说服自己,别人总是有些介意的奇奇怪怪的要点。但

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法,花了不少美刀,最终才发现抖音这个官方文档,哭了: https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capability-adaptation/sc_webgl_keyboa

兔子--Root手机

1.下载root精灵 2.一键root