【双机位A卷】华为OD笔试之【固定滑窗】双机位A-字符串计数匹配【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出解题思路滑窗三问滑窗三答代码PythonJavaCCNode JavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言PyJavaCppCJsGo】【华为OD机考】2025C2025B2024ED卷真题【完全原创题解 | 详细考点分类 | 不断更新题目】【华为OD笔试】双机位A2025C2025B2024ED卷真题机考套题汇总【真实反馈不断更新限时免费】【华为OD笔试】2024ED卷命题规律解读【分析500场OD笔试考点总结】【华为OD流程】性格测试选项注意事项】题目练习网址【固定滑窗】双机位A-字符串计数匹配题目描述与示例题目描述给你一个字符串str和整数k返回满足以下条件的所有子字符串个数恰好包含k个字母。数字0-9各出现至少一次。输入描述第一行字符串str (1 ≤ length ≤ 100000)仅包含数字和小写字母第二行为整数k (0 ≤ k ≤100000 )输出描述输出一个整数表示满足所有条件的子字符串的个数。示例输入a0123456789aa 1输出2解题思路由于符合要求的子串必然包含10个数字0-9恰好各自出现一次和k个字母且原字符串s仅包含数字和小写字母不包含其他特殊字符因此符合要求的子串的长度必然为k10。因此我们可以构建一个长度为win_len k10的窗口通过固定滑窗过程来解决该问题。为了判断子串中数字是否都恰好出现一次我们可以构建一个长度为10的列表cnt_num_win来储存窗口中出现的数字个数。其中cnt_num_win[i]就表示数字i在窗口中出现的次数。考虑滑动窗口三问三答滑窗三问Q1对于每一个右指针right所指的元素ch做什么操作Q2什么时候要令左指针left右移对于left所指的元素left_ch要做什么操作Q3什么时候进行ans的更新如何更新滑窗三答A1如果ch是数字则更新cnt_num_win[ch] 1表示ch在窗口中出现的次数增加1。A2移除窗口的left right - win_len。如果ch_left是数字则更新cnt_num_win[ch_left] - 1表示ch_left在窗口中出现的次数减少1。A3如果cnt_num_win中的所有元素均为1则说明0-9这10个数字在窗口中出现的次数恰好均为1更新答案。当ch或ch_left为字母时无需做任何操作。代码Python# 题目【固定滑窗】双机位A-字符串计数匹配# 分值100# 作者闭着眼睛学数理化# 算法固定滑窗# 代码看不懂的地方请直接在群上提问# 用于检查长度为10的列表cnt中所有元素是否为1的函数# 如果cnt中所有元素都为1则返回1否则返回0defcheck(cnt):returnint(all(num1fornumincnt))# 输入原字符串sinput()# 输入k值kint(input())# 固定滑窗的窗口长度为k10win_lenk10# 构建长度为10的列表用来记录窗口中的数字个数# cnt[i]就表示数字i的出现次数cnt[0]*10# 初始化第一个窗口的情况forchins[:win_len]:# 如果ch是数字ifch.isdigit():# 则令ch在cnt中的计数1cnt[int(ch)]1# 初始化答案变量# 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1# 否则初始化为0anscheck(cnt)# 固定滑窗过程forright,chinenumerate(s[win_len:],win_len):# A1ifch.isdigit():cnt[int(ch)]1# A2leftright-win_len ch_lefts[left]ifch_left.isdigit():cnt[int(ch_left)]-1# A3anscheck(cnt)print(ans)Javaimportjava.util.*;publicclassMain{// 用于检查长度为10的数组 cnt 中所有元素是否为1的函数// 如果 cnt 中所有元素都为1则返回1否则返回0publicstaticintcheck(int[]cnt){for(intnum:cnt){if(num!1)return0;}return1;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);// 输入原字符串Stringssc.nextLine();// 输入 k 值intksc.nextInt();// 固定滑窗的窗口长度为 k10intwinLenk10;// 构建长度为10的数组用来记录窗口中的数字个数// cnt[i] 就表示数字 i 的出现次数int[]cntnewint[10];// 初始化第一个窗口的情况for(inti0;iMath.min(winLen,s.length());i){charchs.charAt(i);// 如果 ch 是数字if(Character.isDigit(ch)){cnt[ch-0];}}// 初始化答案变量// 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1否则初始化为0intanscheck(cnt);// 固定滑窗过程for(intrightwinLen;rights.length();right){charchs.charAt(right);// A1if(Character.isDigit(ch)){cnt[ch-0];}// A2intleftright-winLen;charchLefts.charAt(left);if(Character.isDigit(chLeft)){cnt[chLeft-0]--;}// A3anscheck(cnt);}System.out.println(ans);}}C#includeiostream#includestring#includevectorusingnamespacestd;// 用于检查长度为10的数组 cnt 中所有元素是否为1的函数// 如果 cnt 中所有元素都为1则返回1否则返回0intcheck(constvectorintcnt){for(intnum:cnt){if(num!1)return0;}return1;}intmain(){string s;getline(cin,s);// 输入原字符串intk;cink;// 输入 k 值// 固定滑窗的窗口长度为 k10intwin_lenk10;// 构建长度为10的数组用来记录窗口中的数字个数vectorintcnt(10,0);// 初始化第一个窗口的情况for(inti0;imin(win_len,(int)s.size());i){charchs[i];// 如果 ch 是数字if(isdigit(ch)){cnt[ch-0];}}// 初始化答案变量// 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1否则初始化为0intanscheck(cnt);// 固定滑窗过程for(intrightwin_len;right(int)s.size();right){charchs[right];// A1if(isdigit(ch)){cnt[ch-0];}// A2intleftright-win_len;charch_lefts[left];if(isdigit(ch_left)){cnt[ch_left-0]--;}// A3anscheck(cnt);}coutansendl;return0;}C#includestdio.h#includestring.h#includectype.h// 用于检查长度为10的数组 cnt 中所有元素是否为1的函数// 如果 cnt 中所有元素都为1则返回1否则返回0intcheck(intcnt[10]){for(inti0;i10;i){if(cnt[i]!1)return0;}return1;}intmain(){chars[100005];// 输入原字符串fgets(s,sizeof(s),stdin);s[strcspn(s,\n)]\0;// 去除换行符intk;// 输入 k 值scanf(%d,k);// 固定滑窗的窗口长度为 k10intwin_lenk10;// 构建长度为10的数组用来记录窗口中的数字个数intcnt[10]{0};intnstrlen(s);// 初始化第一个窗口的情况for(inti0;iwin_lenin;i){charchs[i];// 如果 ch 是数字if(isdigit(ch)){cnt[ch-0];}}// 初始化答案变量// 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1否则初始化为0intanscheck(cnt);// 固定滑窗过程for(intrightwin_len;rightn;right){charchs[right];// A1if(isdigit(ch)){cnt[ch-0];}// A2intleftright-win_len;charch_lefts[left];if(isdigit(ch_left)){cnt[ch_left-0]--;}// A3anscheck(cnt);}printf(%d\n,ans);return0;}Node JavaScript// Node.js 固定滑窗实现 - 字符串计数匹配constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letinputLines[];rl.on(line,lineinputLines.push(line.trim())).on(close,(){constsinputLines[0];// 输入原字符串constkparseInt(inputLines[1]);// 输入 k 值console.log(solve(s,k));});// 检查长度为10的数组 cnt 中所有元素是否为1的函数functioncheck(cnt){for(letnumofcnt){if(num!1)return0;}return1;}functionsolve(s,k){// 固定滑窗的窗口长度为 k10constwinLenk10;// 构建长度为10的数组用来记录窗口中的数字个数constcntArray(10).fill(0);// 初始化第一个窗口的情况for(leti0;iMath.min(winLen,s.length);i){constchs[i];// 如果 ch 是数字if(/\d/.test(ch)){cnt[parseInt(ch)];}}// 初始化答案变量// 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1否则初始化为0letanscheck(cnt);// 固定滑窗过程for(letrightwinLen;rights.length;right){constchs[right];// A1if(/\d/.test(ch)){cnt[parseInt(ch)];}// A2constleftright-winLen;constchLefts[left];if(/\d/.test(chLeft)){cnt[parseInt(chLeft)]--;}// A3anscheck(cnt);}returnans;}Gopackagemainimport(bufiofmtosstrconvstrings)// 用于检查长度为10的数组 cnt 中所有元素是否为1的函数// 如果 cnt 中所有元素都为1则返回1否则返回0funccheck(cnt[10]int)int{for_,num:rangecnt{ifnum!1{return0}}return1}funcmain(){in:bufio.NewScanner(os.Stdin)in.Buffer(make([]byte,0,1024),120)// 放大缓冲防止长行被截断// 输入原字符串if!in.Scan(){return}s:strings.TrimSpace(in.Text())// 输入 k 值if!in.Scan(){return}kStr:strings.TrimSpace(in.Text())k,_:strconv.Atoi(kStr)// 固定滑窗的窗口长度为 k10winLen:k10// 构建长度为10的数组用来记录窗口中的数字个数varcnt[10]intn:len(s)// 初始化第一个窗口的情况limit:winLeniflimitn{limitn}fori:0;ilimit;i{ch:s[i]// 如果 ch 是数字ifch0ch9{cnt[ch-0]}}// 初始化答案变量// 如果第一个窗口中0-9这些数字出现次数均为1则初始化ans为1否则初始化为0ans:check(cnt)// 固定滑窗过程forright:winLen;rightn;right{// A1ch:s[right]ifch0ch9{cnt[ch-0]}// A2left:right-winLen chLeft:s[left]ifchLeft0chLeft9{cnt[chLeft-0]--}// A3anscheck(cnt)}fmt.Println(ans)}时空复杂度时间复杂度O(n)。仅需一次遍历原字符串空间复杂度O(1)。仅需长度为10的列表cnt来维护固定滑窗过程可视为常数空间复杂度。华为OD算法/大厂面试高频题算法练习冲刺训练华子OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名目前已服务1000同学成功上岸课程讲师为全网200w粉丝编程博主吴师兄学算法以及小红书头部编程博主闭着眼睛学数理化90天陪伴式学习100直播课时300动画图解视频500LeetCode经典题500华为OD真题/大厂真题还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁

相关新闻

Python+朴素贝叶斯实现中文垃圾邮件分类:原理、流程与避坑指南

Python+朴素贝叶斯实现中文垃圾邮件分类:原理、流程与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 7:23:14 阅读更多 →
3分钟修好图片瑕疵:免安装的免费浏览器端图像修复与超分辨率工具

3分钟修好图片瑕疵:免安装的免费浏览器端图像修复与超分辨率工具

3分钟修好图片瑕疵:免安装的免费浏览器端图像修复与超分辨率工具 【免费下载链接】inpaint-web A free and open-source inpainting & image-upscaling tool powered by webgpu and wasm on the browser。| 基于 Webgpu 技术和 wasm 技术的免费开源 inpainting …

2026/9/30 14:49:07 阅读更多 →
手写密度聚类:MedoidShift与QuickShift实现与调参指南

手写密度聚类:MedoidShift与QuickShift实现与调参指南

简介:MedoidShift与QuickShift是两种主流的无监督聚类算法,常用于图像分割、数据降维与特征聚类等任务。这份资料面向机器学习初学者和需要做聚类算法选型的开发者,以可运行的Python代码为主线,清晰说明了两类算法的迭代逻辑、密度…

2026/9/30 3:06:38 阅读更多 →

最新新闻

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

物联网后端数据可视化消息队列 【免费下载链接】thingsboard All-in-one IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard 点击查看 免费下载 本篇技术指南围绕…

2026/10/1 21:04:06 阅读更多 →
Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

插件化那 20 天写的是"程序内部怎么长"。这个专栏换个角度——从一堆源码到一个能交给别人用的安装包,中间那些把人卡住的事。 开篇先解决最前面的一步:环境。去年我接手一个老项目,硬性要求 Qt 5.12.11 MSVC2017。照着网上的教程…

2026/10/1 21:04:06 阅读更多 →
AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

9 月 28 日,AMD 官宣了一笔让不少人意外的收购:以约 82 亿美元(约合人民币 550 亿元)全股票收购 World Labs——由「AI 教母」李飞飞 2024 年联合创办、专注空间智能与世界模型的研究实验室。交易预计年底前完成,李飞飞…

2026/10/1 21:04:06 阅读更多 →
咱们散户的心里话

咱们散户的心里话

咱们散户的心里话: 我想给你们更好的生活。 我想换掉那辆开了多年的旧车,想在周末带你们去更远的地方看海,想让孩子用上更优质的教育资源,想让家里的餐桌出现更多样、更健康的食材。 这些念头并非虚荣,而是我作为家庭支…

2026/10/1 21:04:06 阅读更多 →
HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 迎来了全新版本,此次更新最大的亮点在于界面设计的全面革新。新版采用了更为直观简洁的 UI 风格,不仅让整体视觉效果焕然一新,更重要的是大幅降低了操作复杂度,即便是初次接触的用户也能快速上手。 本文将逐一解…

2026/10/1 21:04:06 阅读更多 →
晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次地区APP合规拉新:线上中介与本地团队的执行模式差异解析在寻找晋中榆次地区靠谱的APP合规拉新推广团队推荐资源时,许多项目方往往面临选择困境:是选择覆盖面广的线上流量中介,还是深耕区域的本地实体团队?事实…

2026/10/1 21:03:05 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →