当前位置: 首页 > wzjs >正文

中小型企业网站建设的资金流动成都调查事务所

中小型企业网站建设的资金流动,成都调查事务所,公益事业做网站,平面构成创意与设计2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 给定两个字符串s1和s2和正整数K,其中s1长度为n1,s2长度为n2,在s2中选一个子串,满足: 该子串长度为n1k该子串中包含s1中全部字…

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

在这里插入图片描述

题目描述

给定两个字符串s1和s2和正整数K,其中s1长度为n1,s2长度为n2,在s2中选一个子串,满足:

  • 该子串长度为n1+k
  • 该子串中包含s1中全部字母,
  • 该子串每个字母出现次数不小于s1中对应的字母,

我们称s2以长度k冗余覆盖s1,给定s1,s2,k,求最左侧的s2以长度k冗余覆盖s1的子串的首个元素的下标,如果没有返回**-1**。

输入描述

输入三行,第一行为s1;

第二行为s2;

第三行为k;

s1和s2只包含小写字母

输出描述

最左侧的s2以长度k冗余覆盖s1的子串首个元素下标,如果没有返回**-1。**

示例1

输入:
ab
aabcd
1输出:
0说明:
子串aab和abc符合要求,由于aab在abc的左侧,因此输出aab的下标:0

示例2

输入:
abc
dfs
10输出:
-1说明:
s2无法覆盖s1,输出 -1

C++

#include <bits/stdc++.h>using namespace std;int main() {string s1, s2;int k;cin >> s1;cin >> s2;cin >> k;int n1 = s1.size(), n2 = s2.size();// 记录 s1 中每个字符出现的次数int cnt1[26] = {0};for (char c: s1) cnt1[c - 'a']++;// 用于记录s2滑动窗口上的子字符串中的每个字符出现的次数int cnt2[26] = {0};int l = 0, r = 0;while (r < n2) {cnt2[s2[r++] - 'a']++;// 子串长度不足 n1 + k 时继续扩大窗口if (r < n1 + k) continue;// 使保持窗口大小为 n1 + kif (r - l > n1 + k) cnt2[s2[l++]]--;// 判断当前子字符串 s[l:r] 是否冗余覆盖 s1 中所有字母bool cover = true;for (int i = 0; i < 26; i++) {if (cnt1[i] > cnt2[i]) {cover = false;break;}}// 找到冗余覆盖的子字符串if (cover) {cout << l << endl;return 0;}}// 没有找到符合要求的子字符串cout << -1 << endl;return 0;
}

题目分析

这个问题要求我们找到一个子串,使得该子串长度为 n1 + k,并且能够冗余覆盖 s1 中的所有字母,即该子串中每个字母的出现次数至少是 s1 中相应字母的出现次数。要求我们找到最左边的符合条件的子串,并输出其起始位置。

解题思路

这个问题本质上是一个滑动窗口问题,我们可以通过维护一个窗口来扫描字符串 s2。具体步骤如下:

  1. 字符频率统计:

    • 先统计字符串 s1 中每个字符的出现次数,记录在数组 cnt1 中。
    • 然后在 s2 中维护一个滑动窗口,该窗口的大小是 n1 + k,并记录该窗口中每个字符的出现次数,保存在 cnt2 数组中。
  2. 滑动窗口:

    • s2 的第一个字符开始,窗口的右边界逐渐向右扩展,直到窗口的大小为 n1 + k
    • 每次扩展窗口时,更新 cnt2 数组,记录当前窗口中每个字符的出现次数。
    • 如果窗口的大小超过了 n1 + k,则左边界向右移动,保持窗口大小不变,并更新 cnt2 数组。
  3. 判断冗余覆盖:

    • 每次更新窗口时,我们检查当前窗口中的字符频率是否能够满足冗余覆盖 s1 的条件。具体来说,检查 cnt2 中每个字符的数量是否都大于等于 cnt1 中相应字符的数量。
  4. 结果输出:

    • 如果找到了符合条件的子串,输出其左边界索引。
    • 如果扫描完整个 s2 后没有找到符合条件的子串,输出 -1

时间复杂度分析

  • 滑动窗口的右边界 r 会遍历整个 s2 字符串,因此时间复杂度是 O(n2),其中 n2s2 的长度。
  • 对每个滑动窗口,检查是否满足冗余覆盖需要遍历 26 个字母,因此检查过程的时间复杂度是 O(26) ≈ O(1)。
  • 总的时间复杂度是 O(n2)。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

http://www.dtcms.com/wzjs/329056.html

相关文章:

  • 做网站导航站的注意点百度排行榜风云榜小说
  • 常见的动态网站开发技术网络营销的主要内容包括
  • 自己做的博客网站可以营销的十大产品
  • 校园官方网站建设自动发外链工具
  • wordpress加速插件麒麟seo
  • 哪些网站免费做职业测评品牌型网站制作价格
  • 宝安网站建设百度图片收录提交入口
  • 整站下载器 安卓版网址怎么申请注册
  • 广告设计网站建设怎么做app引流推广软件
  • java购物网站扫码支付怎么做优化疫情防控措施
  • b2b还是自己做网站平台推广策划方案
  • 绚丽网站模板网络营销课程大概学什么内容
  • 怎么做独立网站百度关键词推广2元一天
  • 十堰网站开发常见的网络直接营销有哪些
  • 创办免费企业网站站长工具同大全站
  • 大连网站制作的公司中国搜索引擎大全
  • 游戏网站做关键字最近新闻摘抄
  • 广州商城网站建设报价人大常委会委员长
  • 国贸行业的网站建设免费的拓客平台有哪些
  • 简述网站开发的三层架构百度爱采购服务商查询
  • 爱做片视频网站太原百度seo排名软件
  • 凉州区住房和城乡建设局网站seopeixun com cn
  • 怎么做云购网站吗郑州网络推广平台有哪些
  • 专题网站搭建新手如何找cps推广渠道
  • 查找网站域名淘宝店铺推广
  • 网站增加域名备案专业seo培训学校
  • 七号技师 wordpressseo关键词快速排名
  • 织梦系统网站如何创建网址
  • 怎么做个手机版的网站sem专员
  • 网站建设实训个人总结常州谷歌推广