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

华为OD机考双机位C卷 - 字符串计数匹配 (Java Python JS C/C++ GO )

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

华为OD机考双机位C卷

题目描述

给你一个字符串str和整数k,返回满足以下条件的所有子字符串个数:

  1. 恰好包含k个字母。
  2. 数字0-9各出现至少一次。

输入描述

  • 第一行字符串str(1≤ length ≤ 100000),仅包含数字和小写字母
  • 第二行为整数k(0 ≤ k ≤100000 )

输出描述

输出一个整数,表示满足所有条件的子字符串的个数。

子字符串是字符串中连续的非空字符序列

示例1

输入

a0123456789aa 1

输出

2

说明

解题思路

Java

importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);// 读取第一行输入,获取字符串strStringstr=scanner.nextLine();// 读取第二行输入,获取整数kintk=Integer.parseInt(scanner.nextLine());// 初始化计数器,用于统计满足条件的子字符串个数intcount=0;// 获取字符串的长度intn=str.length();// 特殊情况处理:当k=0时,即要求子字符串中不包含任何字母if(k==0){// 使用双指针方法,right指针逐步向右移动for(intleft=0,right=0;right<n;right++){// 创建数组用于记录每个数字(0-9)的出现次数int[]digits=newint[10];// 记录当前子字符串中字母的数量intletters=0;// 遍历从left到right的所有字符for(inti=left;i<=right;i++){charc=str.charAt(i);// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}}// 判断当前子字符串是否满足条件:不含字母且包含所有数字(0-9)if(letters==0&&allDigitsPresent(digits)){count++;}}}else{// 一般情况:当k>0时,需要恰好有k个字母的子字符串// 枚举所有可能的子字符串起始位置for(intleft=0;left<n;left++){// 创建数组用于记录每个数字(0-9)的出现次数int[]digits=newint[10];// 记录当前子字符串中字母的数量intletters=0;// 枚举所有可能的子字符串结束位置for(intright=left;right<n;right++){charc=str.charAt(right);// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;// 优化:如果字母数量超过k,就不再继续扩展当前子字符串if(letters>k)break;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}// 判断当前子字符串是否满足条件:恰好有k个字母且包含所有数字(0-9)if(letters==k&&allDigitsPresent(digits)){count++;}}}}// 输出结果System.out.println(count);}/** * 检查是否所有数字(0-9)都至少出现一次 * @param digits 记录数字出现次数的数组 * @return 如果所有数字都至少出现一次,返回true;否则返回false */privatestaticbooleanallDigitsPresent(int[]digits){// 检查每个数字是否都出现至少一次for(intdigit:digits){// 如果有任何一个数字的出现次数为0,返回falseif(digit==0)returnfalse;}// 所有数字都至少出现一次,返回truereturntrue;}}

Python

defall_digits_present(digits):""" 检查是否所有数字(0-9)都至少出现一次 Args: digits: 记录数字出现次数的列表 Returns: 如果所有数字都至少出现一次,返回True;否则返回False """fordigitindigits:ifdigit==0:returnFalsereturnTrue# 读取输入str_input=input()k=int(input())# 初始化计数器,用于统计满足条件的子字符串个数count=0n=len(str_input)# 特殊情况处理:当k=0时,即要求子字符串中不包含任何字母ifk==0:left=0# 使用双指针方法,right指针逐步向右移动forrightinrange(n):# 创建列表用于记录每个数字(0-9)的出现次数digits=[0]*10# 记录当前子字符串中字母的数量letters=0# 遍历从left到right的所有字符foriinrange(left,right+1):c=str_input[i]# 如果是字母,字母计数器加1if'a'<=c<='z':letters+=1# 如果是数字,对应数字的计数器加1elif'0'<=c<='9':digits[int(c)]+=1# 判断当前子字符串是否满足条件:不含字母且包含所有数字(0-9)ifletters==0andall_digits_present(digits):count+=1else:# 一般情况:当k>0时,需要恰好有k个字母的子字符串# 枚举所有可能的子字符串起始位置forleftinrange(n):# 创建列表用于记录每个数字(0-9)的出现次数digits=[0]*10# 记录当前子字符串中字母的数量letters=0# 枚举所有可能的子字符串结束位置forrightinrange(left,n):c=str_input[right]# 如果是字母,字母计数器加1if'a'<=c<='z':letters+=1# 优化:如果字母数量超过k,就不再继续扩展当前子字符串ifletters>k:break# 如果是数字,对应数字的计数器加1elif'0'<=c<='9':digits[int(c)]+=1# 判断当前子字符串是否满足条件:恰好有k个字母且包含所有数字(0-9)ifletters==kandall_digits_present(digits):count+=1# 输出结果print(count)

JavaScript

// 引入readline模块用于读取输入constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinputLines=[];letlineCount=0;// 检查是否所有数字(0-9)都至少出现一次functionallDigitsPresent(digits){for(letdigitofdigits){if(digit===0)returnfalse;}returntrue;}// 读取输入rl.on('line',(line)=>{inputLines.push(line);lineCount++;if(lineCount===2){conststr=inputLines[0];constk=parseInt(inputLines[1]);letcount=0;constn=str.length;// 特殊情况处理:当k=0时,即要求子字符串中不包含任何字母if(k===0){// 使用双指针方法,right指针逐步向右移动for(letleft=0,right=0;right<n;right++){// 创建数组用于记录每个数字(0-9)的出现次数constdigits=newArray(10).fill(0);// 记录当前子字符串中字母的数量letletters=0;// 遍历从left到right的所有字符for(leti=left;i<=right;i++){constc=str.charAt(i);// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[parseInt(c)]++;}}// 判断当前子字符串是否满足条件:不含字母且包含所有数字(0-9)if(letters===0&&allDigitsPresent(digits)){count++;}}}else{// 一般情况:当k>0时,需要恰好有k个字母的子字符串// 枚举所有可能的子字符串起始位置for(letleft=0;left<n;left++){// 创建数组用于记录每个数字(0-9)的出现次数constdigits=newArray(10).fill(0);// 记录当前子字符串中字母的数量letletters=0;// 枚举所有可能的子字符串结束位置for(letright=left;right<n;right++){constc=str.charAt(right);// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;// 优化:如果字母数量超过k,就不再继续扩展当前子字符串if(letters>k)break;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[parseInt(c)]++;}// 判断当前子字符串是否满足条件:恰好有k个字母且包含所有数字(0-9)if(letters===k&&allDigitsPresent(digits)){count++;}}}}// 输出结果console.log(count);rl.close();}});

C++

#include<iostream>#include<string>#include<vector>using namespace std;// 检查是否所有数字(0-9)都至少出现一次boolallDigitsPresent(constvector<int>&digits){for(intdigit:digits){if(digit==0)returnfalse;}returntrue;}intmain(){// 读取输入string str;intk;getline(cin,str);cin>>k;// 初始化计数器,用于统计满足条件的子字符串个数intcount=0;intn=str.length();// 特殊情况处理:当k=0时,即要求子字符串中不包含任何字母if(k==0){// 使用双指针方法,right指针逐步向右移动for(intleft=0,right=0;right<n;right++){// 创建向量用于记录每个数字(0-9)的出现次数vector<int>digits(10,0);// 记录当前子字符串中字母的数量intletters=0;// 遍历从left到right的所有字符for(inti=left;i<=right;i++){charc=str[i];// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}}// 判断当前子字符串是否满足条件:不含字母且包含所有数字(0-9)if(letters==0&&allDigitsPresent(digits)){count++;}}}else{// 一般情况:当k>0时,需要恰好有k个字母的子字符串// 枚举所有可能的子字符串起始位置for(intleft=0;left<n;left++){// 创建向量用于记录每个数字(0-9)的出现次数vector<int>digits(10,0);// 记录当前子字符串中字母的数量intletters=0;// 枚举所有可能的子字符串结束位置for(intright=left;right<n;right++){charc=str[right];// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;// 优化:如果字母数量超过k,就不再继续扩展当前子字符串if(letters>k)break;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}// 判断当前子字符串是否满足条件:恰好有k个字母且包含所有数字(0-9)if(letters==k&&allDigitsPresent(digits)){count++;}}}}// 输出结果cout<<count<<endl;return0;}

C语言

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdbool.h>/** * 检查是否所有数字(0-9)都至少出现一次 * @param digits 记录数字出现次数的数组 * @return 如果所有数字都至少出现一次,返回true;否则返回false */boolallDigitsPresent(intdigits[10]){for(inti=0;i<10;i++){if(digits[i]==0)returnfalse;}returntrue;}intmain(){// 定义变量charstr[100001];// 字符串最大长度为100000intk;// 读取输入fgets(str,sizeof(str),stdin);// 移除换行符str[strcspn(str,"\n")]=0;scanf("%d",&k);// 初始化计数器,用于统计满足条件的子字符串个数intcount=0;intn=strlen(str);// 特殊情况处理:当k=0时,即要求子字符串中不包含任何字母if(k==0){// 使用双指针方法,right指针逐步向右移动for(intleft=0,right=0;right<n;right++){// 创建数组用于记录每个数字(0-9)的出现次数intdigits[10]={0};// 记录当前子字符串中字母的数量intletters=0;// 遍历从left到right的所有字符for(inti=left;i<=right;i++){charc=str[i];// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}}// 判断当前子字符串是否满足条件:不含字母且包含所有数字(0-9)if(letters==0&&allDigitsPresent(digits)){count++;}}}else{// 一般情况:当k>0时,需要恰好有k个字母的子字符串// 枚举所有可能的子字符串起始位置for(intleft=0;left<n;left++){// 创建数组用于记录每个数字(0-9)的出现次数intdigits[10]={0};// 记录当前子字符串中字母的数量intletters=0;// 枚举所有可能的子字符串结束位置for(intright=left;right<n;right++){charc=str[right];// 如果是字母,字母计数器加1if(c>='a'&&c<='z'){letters++;// 优化:如果字母数量超过k,就不再继续扩展当前子字符串if(letters>k)break;}// 如果是数字,对应数字的计数器加1elseif(c>='0'&&c<='9'){digits[c-'0']++;}// 判断当前子字符串是否满足条件:恰好有k个字母且包含所有数字(0-9)if(letters==k&&allDigitsPresent(digits)){count++;}}}}// 输出结果printf("%d\n",count);return0;}

文章目录

  • 最新华为OD机试
  • 题目描述
  • 输入描述
  • 输出描述
  • 示例1
  • 解题思路
  • Java
  • Python
  • JavaScript
  • C++
  • C语言

http://www.jsqmd.com/news/194708/

相关文章:

  • 2026最新延吉韩式烤肉餐厅top5推荐!延吉本地延边大学等地加盟餐饮品牌深度解析及选择指南 - 全局中转站
  • 友链测试
  • 2026年1月火锅底料推荐与评价:从家庭厨房到餐饮后厨 - 速递信息
  • 从基础到进阶,助你成为AI大模型专家_2025最新AI大模型学习路线:(非常详细)
  • vp 2025冬季PAT甲级
  • HISTFILE 介绍
  • 狂想:2026-1-3我的原创思考:意识作为“生态聚落的目的性涌现”
  • 35岁程序员转行大模型:前景分析与实战路径,助你把握技术红利_35岁程序员转行大模型前景分析与转型指南
  • C和汇编混合编程
  • 安益日化:品牌推荐高品质洗护用品ODM代加工 - 速递信息
  • Availability(可用性)与高可用架构 内容的结构化知识点汇总
  • Agentic AI合规经验:提示工程架构师如何打造个人品牌?
  • CF830E Perpetual Motion Machine
  • 2026油泼辣子品牌top5推荐榜,优质工厂及供应商深度解析/选择指南 - 全局中转站
  • 【Unity 实用工具篇】| UX Tool 工具 快速上手使用,提高日常开发效率
  • 高档香薰香氛生产工厂排名:安益日化BSCI认证全链生产领跑 - 速递信息
  • 102302114_比山布努尔兰_作业2
  • .NET周刊【12月第1期 2025-12-07】
  • 个人开发者做测试环境,2核2G服务器够用吗?
  • 单例模式:高效构建全局唯一实例
  • 2核2G配置的Linux云服务器能同时跑Nginx、MySQL和PHP吗?
  • 吐血推荐10个一键生成论文工具,专科生毕业论文轻松搞定!
  • Cursor收购Graphite:打通从编码到合并的闭环
  • 基于定制开发开源AI智能名片S2B2C商城小程序的刚需类产品电商运营模式研究
  • 电脑配置流程(VR项目)
  • 26年元旦DeepSeek梁文峰署名发的mHC讲了什么
  • 雷家林(レイ・ジアリン)詩歌集録 その二
  • 2026辣椒油品牌top5推荐榜,优质工厂及供应商深度解析/选择指南 - 全局中转站
  • docker后台运行模式和交互模式学习
  • 2026最新延吉烤肉餐厅top5推荐!延吉本地延边大学等地加盟餐饮品牌深度解析及选择指南 - 全局中转站