华为OD机试 - 最长元音子串的长度(Python/JS/C/C++ 2024 E卷 100分)

news2024/12/23 10:35:57

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。

比如:

  • “a” 、 “aa”是元音字符串,其瑕疵度都为0
  • “aiur”不是元音字符串(结尾不是元音字符)
  • “abira”是元音字符串,其瑕疵度为2

给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。

子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。

二、输入描述

首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0, 65535]。

接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0, 65535]。

三、输出描述

输出为一个整数,代表满足条件的元音字符最长子串的长度。

输入输出说明
0
asdbuiodevauufgh
3uio为瑕疵度为0的最长子串,故长度为3 当然auu也是
2
aeueo
30

四、测试用例

1、输入

2
nezhastudyjavaveryhard

2、输出

5

3、说明

掌握核心编程思想,让你的编程不再烦恼。

开头是元音,结尾是元音,中间出现的非元音字符是瑕疵度。

符合要求的子串有:

  • ezha
  • astu
  • avave

最长的是avave,长度5。

五、解题思路

核心思想:

开头是元音,结尾是元音,中间出现的非元音字符是瑕疵度

这道题的关键是正则表达式的合理使用。

六、Python算法源码

import re

def main():
    import sys
    import sys

    # 读取标准输入的所有行
    input_lines = sys.stdin.read().splitlines()
    
    # 读取瑕疵度flaw
    flaw = int(input_lines[0])
    
    # 读取仅由字符a-z和A-Z组成的字符串
    str_input = input_lines[1]
    
    # 定义元音字母集合,包括大小写
    vowels = "aeiouAEIOU"
    
    # 构建正则表达式
    if flaw == 0:
        # 当瑕疵度为0时,匹配连续的至少一个元音字母
        regex = f"[{vowels}]+"
    else:
        # 当瑕疵度大于0时,匹配以元音字母开头和结尾,中间最多有flaw个非元音字母
        regex = f"[{vowels}](?:[^${vowels}]{{0,{flaw}}}[{vowels}])+"
    
    # 编译正则表达式
    pattern = re.compile(regex)
    
    # 寻找所有符合要求的子串
    matches = pattern.finditer(str_input)
    
    # 存储符合要求的子串的最大长度
    max_length = 0
    
    # 遍历所有匹配
    for match in matches:
        # 获取符合要求的子串
        matched_substring = match.group()
        
        # 更新最大长度
        if len(matched_substring) > max_length:
            max_length = len(matched_substring)
    
    # 输出符合要求的子串的最大长度
    print(max_length)

if __name__ == "__main__":
    main()

七、JavaScript算法源码

// 引入readline模块以读取输入
const readline = require('readline');

// 创建接口以读取标准输入
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let inputLines = [];
let currentLine = 0;

// 读取所有输入行
rl.on('line', (line) => {
    inputLines.push(line);
});

// 输入结束后执行的函数
rl.on('close', () => {
    // 读取瑕疵度flaw
    let flaw = parseInt(inputLines[0]);

    // 读取仅由字符a-z和A-Z组成的字符串
    let str = inputLines[1];

    // 定义元音字母集合,包括大小写
    const vowels = "aeiouAEIOU";

    // 构建正则表达式
    let regex = "";
    if (flaw === 0) {
        // 当瑕疵度为0时,匹配连续的至少一个元音字母
        regex = `[${vowels}]+`;
    } else {
        // 当瑕疵度大于0时,匹配以元音字母开头和结尾,中间最多有flaw个非元音字母
        regex = `[${vowels}](?:[^${vowels}]{0,${flaw}}[${vowels}])+`;
    }

    // 编译正则表达式
    const pattern = new RegExp(regex);

    // 寻找所有符合要求的子串
    const matches = str.matchAll(pattern);

    // 存储符合要求的子串的最大长度
    let maxLength = 0;

    // 遍历所有匹配
    for (const match of matches) {
        // 获取符合要求的子串
        let matchedSubstring = match[0];

        // 更新最大长度
        if (matchedSubstring.length > maxLength) {
            maxLength = matchedSubstring.length;
        }
    }

    // 输出符合要求的子串的最大长度
    console.log(maxLength);
});

八、C算法源码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <regex.h>

int main(){
    int flaw;
    char str[1001]; // 假设输入字符串长度不超过1000
    
    // 读取瑕疵度flaw
    scanf("%d", &flaw);
    
    // 读取仅由字符a-z和A-Z组成的字符串
    scanf("%s", str);
    
    // 定义元音字母集合,包括大小写
    char vowels[] = "aeiouAEIOU";
    
    // 构建正则表达式
    char regex[2000] = ""; // 足够大的缓冲区
    if(flaw == 0){
        // 当瑕疵度为0时,匹配连续的至少一个元音字母
        sprintf(regex, "[%s]+", vowels);
    }
    else{
        // 当瑕疵度大于0时,匹配以元音字母开头和结尾,中间最多有flaw个非元音字母
        sprintf(regex, "[%s](?:[^%s]{0,%d}[%s])+", vowels, vowels, flaw, vowels);
    }
    
    // 编译正则表达式
    regex_t regex_compiled;
    int reti = regcomp(&regex_compiled, regex, REG_EXTENDED);
    if (reti) {
        fprintf(stderr, "Could not compile regex\n");
        exit(1);
    }
    
    // 寻找所有符合要求的子串
    regmatch_t pmatch[1];
    int max_length = 0;
    const char *p = str;
    int offset = 0;
    
    while(regexec(&regex_compiled, p, 1, pmatch, 0) == 0){
        // 计算匹配的起始和结束位置
        int start = pmatch[0].rm_so + offset;
        int end = pmatch[0].rm_eo + offset;
        
        // 计算匹配的子串长度
        int length = end - start;
        if(length > max_length){
            max_length = length;
        }
        
        // 移动指针,避免重复匹配
        p += pmatch[0].rm_eo;
        offset += pmatch[0].rm_eo;
    }
    
    // 输出符合要求的子串的最大长度
    printf("%d\n", max_length);
    
    // 释放正则表达式的内存
    regfree(&regex_compiled);
    
    return 0;
}

九、C++算法源码

#include <bits/stdc++.h>
#include <regex>
using namespace std;

int main(){
    int flaw;
    string str;
    
    // 读取瑕疵度flaw
    cin >> flaw;
    
    // 读取仅由字符a-z和A-Z组成的字符串
    cin >> str;
    
    // 定义元音字母集合,包括大小写
    string vowels = "aeiouAEIOU";
    
    // 构建正则表达式
    string regex_str;
    if(flaw == 0){
        // 当瑕疵度为0时,匹配连续的至少一个元音字母
        regex_str = "[" + vowels + "]+";
    }
    else{
        // 当瑕疵度大于0时,匹配以元音字母开头和结尾,中间最多有flaw个非元音字母
        regex_str = "[" + vowels + "](?:[^" + vowels + "]{0," + to_string(flaw) + "}[" + vowels + "])+";
    }
    
    // 编译正则表达式
    regex pattern(regex_str);
    
    // 寻找所有符合要求的子串
    smatch match;
    string::const_iterator searchStart(str.cbegin());
    
    // 存储符合要求的子串的最大长度
    int max_length = 0;
    
    while(regex_search(searchStart, str.cend(), match, pattern)){
        // 获取符合要求的子串
        string matched_substring = match[0];
        
        // 更新最大长度
        if(matched_substring.length() > max_length){
            max_length = matched_substring.length();
        }
        
        // 移动搜索起始位置
        searchStart = match[0].second;
    }
    
    // 输出符合要求的子串的最大长度
    cout << max_length << endl;
    
    return 0;
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 2024-10-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-10-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目6Python项目6C项目2JavaScript项目2Rust项目1Shell项目1Ruby项目1HTML项目1Go项目1Jupyter Notebook项目1Lobe Chat: 开源ChatGP…

【C语言】字符和字符串函数(2)

文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerr函数的使用 一、strncpy函数的使用 我们之前学习的strcpy的作用是把源字符串拷贝到目标空间内&#xff0c;而且经过我们的模拟实现&#x…

智能招聘系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;企业管理&#xff0c;招聘信息管理&#xff0c;应聘信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;我的 开发系统&#…

企望制造ERP系统存在RCE漏洞

漏洞描述 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造&#xff0c;具有国际先进的管理方式&#xff0c;将现代化的管理方式融入erp软件中&#xff0c;让企业分分钟就拥有科学的管理经验。erp的功能包括成本核算、报价定价、订单下达、生产下单、现场管…

鸿蒙NEXT开发环境搭建(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

【设计模式-命令】

定义 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使您能够使用不同的请求、排队请求或记录请求&#xff0c;并支持可撤销的操作。该模式通过将请求与其执行分离&#xff0c;使得请求者和接收者之间…

养生之道,首先在于饮食!

在快节奏的现代生活中&#xff0c;养生健康成为了人们日益关注的话题。良好的生活习惯和科学的养生方式&#xff0c;不仅能够提升我们的生活质量&#xff0c;还能有效预防疾病&#xff0c;让我们拥有更加充沛的精力和更长久的生命力。 养生之道&#xff0c;首先在于饮食。均衡…

cpp,git,unity学习

c#中的? 1. 空值类型&#xff08;Nullable Types&#xff09; ? 可以用于值类型&#xff08;例如 int、bool 等&#xff09;&#xff0c;使它们可以接受 null。通常&#xff0c;值类型不能为 null&#xff0c;但是通过 ? 可以表示它们是可空的。 int? number null; // …

如何使用 Gradio 创建聊天机器人

如何使用 Gradio 创建聊天机器人 文章目录 如何使用 Gradio 创建聊天机器人一、介绍二、简单示例与实战1、定义聊天功能2、示例&#xff1a;回答“是”或“否”的聊天机器人3、另一个使用用户输入和历史记录的示例4、流式聊天机器人 三、定制化聊天机器人1、为您的机器人添加更…

docker-compose 快速部署clickhouse集群

在本教程中&#xff0c;我们将学习如何使用 Docker Compose 部署一个带有三节点的 ClickHouse 集群&#xff0c;并使用 ZooKeeper 作为分布式协调服务。 前提条件 注意事项&#xff1a; 镜像版本号注意保持一致 [zookeeper:3.7, clickhouse/clickhouse-server:22.5.4]config…

清华大学、腾讯联合推全开源多模态架构Oryx 支持超长视频输入

在人工智能快速发展的今天&#xff0c;一个名为ORYX的多模态大型语言模型正在悄然改变我们对AI理解视觉世界能力的认知。这个由清华大学、腾讯和南洋理工大学研究人员联合开发的AI系统&#xff0c;堪称视觉处理领域的"变形金刚"。 ORYX&#xff0c;全称Oryx Multi-M…

Kotlin:2.0.20 的新特性

一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复&#xff0c;我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…

Windows下载安装Minio超详细

1.下载地址 服务端文件:minio.exe 用于接收文件信息。 客户端文件:mac.exe 用于上传文件 &#xff0c;如果用程序代码操作文件存储&#xff0c;只启动服务端即可。 #企业版 https://min.io/download?licenseenterprise&platformkubernetes#/windows #社区版&#xff08;…

TiDB 性能测试的几个优化点

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/513a4eef 背景 前段时间参与了一个 TiDB 的性能测试&#xff0c;具体是在三台海光服务器&#xff08;512G内存、128 core 分8个NUMA、4块3.5T SSD&#xff09;搭建一个混合部署的 TiDB …

嵌入式中C语言小项目的具体实现

大家好&#xff0c;今天主要给大家分享一下&#xff0c;如何使用C语言来实现对应的小项目。 第一&#xff1a;C语言计算器实现 第二&#xff1a;C项目中猜字游戏实现 第三&#xff1a;C语言简单的日历实现 第四&#xff1a;C语言中每日定投债券基金一年能赚多少

浮动与网格系统

控制页面布局的工具有浮动、Flexbox 和定位等&#xff0c;这些工具本身没有优劣支付&#xff0c;只不过实现布局的方式略有不同。 1 浮动 浮动元素会脱离正常的文档流&#xff0c;并向左或向右移动&#xff0c;直到它的边缘碰到包含框或另一个浮动元素的边框为止。 文本和内联…

损失函数篇 | YOLOv5 引入Unified-IoU 高质量目标检测IoU损失

论文地址:https://arxiv.org/pdf/2408.06636 开源代码地址:https://github.com/lxj-drifter/UIOU_files 目标检测是计算机视觉领域的重要组成部分,其效果直接由预测框的回归精度决定。作为模型训练的关键,IoU(交并比)很好地展示了当前预测框与真实框(Ground Truth)之间…

数据结构——队列的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》24~28页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 目录 前言 1、队列的基本概念…

Flutter 3.24 AAPT: error: resource android:attr/lStar not found.

在Android build,gradle下面&#xff0c;添加右边红框的代码&#xff1a; subprojects {afterEvaluate { project ->if (project.plugins.hasPlugin("com.android.application") ||project.plugins.hasPlugin("com.android.library")) {project.androi…

复写零——双指针算法

题目链接 复写零https://leetcode.cn/problems/duplicate-zeros/description/ 题目要求 样例 题目分析 先看示例1&#xff0c;题目要求将数组中所有的0&#xff0c;均复写一遍&#xff0c;且要在原数组上进行更改&#xff0c;多余的元素消失 但我们发现&#xff0c;如果双指针…