华为OD机试 - 最长的指定瑕疵度的元音子串 - 正则表达式(Java 2023 B卷 200分)

目录

华为OD机试 2023B卷题库疯狂收录中,刷题++点这里++

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

比如:

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

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

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

二、输入描述

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

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

三、输出描述

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

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

四、解题思路

核心思想:

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

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

五、Java算法源码

java 复制代码
package com.guor.od;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class OdTest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 预期的瑕疵度flaw
        int flaw = Integer.valueOf(scanner.nextLine());
        // 仅由字符a-z和A-Z组成的字符串
        String str = scanner.nextLine();
        // 开头是元音 结尾是元音 中间出现的非元音字符是瑕疵度
        String regex = "";
        if (flaw == 0) {
            regex = "[aeiouAEIOU]{1,}";
        } else {
            regex = "[aeiouAEIOU]{1}";
            for (int i = 0; i < flaw; i++) {
                regex += "[^aeiouAEIOU]{1}[aeiouAEIOU]*";
            }
            regex += "[aeiouAEIOU]{1}";
        }

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        // 符合要求的字符串的最大长度
        int max = 0;
        // 寻找符合要求的字符串
        while (matcher.find()) {
            // 符合要求的字符串
            System.out.println(str.substring(matcher.start(), matcher.end()));
            // 获取符合要求的字符串的最大长度
            if (matcher.end() - matcher.start() > max) {
                max = matcher.end() - matcher.start();
            }
            StringBuilder sb = new StringBuilder(str);
            sb.setCharAt(matcher.start(), '_');
            str = sb.toString();
            matcher = pattern.matcher(str);
        }
        System.out.println("长度:" + max);
    }
}

六、效果展示

1、输入

2

nezhastudyjavaveryhard

2、输出

5

3、说明

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

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

符合要求的子串有:

  • ezha
  • astu
  • avave

最长的是avave,长度5。

🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关推荐
JienDa9 分钟前
JienDa聊PHP:CSDN博客仿站实战中PHP框架的协同架构方略
java·架构·php
大迪吃小迪15 分钟前
每秒 400 请求场景下,线程池如何合理配置?
java·开发语言
8***f39528 分钟前
SQL中的REGEXP正则表达式使用指南
数据库·sql·正则表达式
雨中飘荡的记忆1 小时前
财务对账系统设计与实现
java
0***h9421 小时前
使用 java -jar 命令启动 Spring Boot 应用时,指定特定的配置文件的几种实现方式
java·spring boot·jar
雨中飘荡的记忆1 小时前
布式事务详解:从理论到实践(RocketMQ + Seata)
java·rocketmq
小龙报1 小时前
【算法通关指南:数据结构和算法篇 】队列相关算法题:3.海港
数据结构·c++·算法·贪心算法·创业创新·学习方法·visual studio
i***48611 小时前
微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
java·spring cloud·微服务
zzlyx991 小时前
用C#采用Avalonia+Mapsui在离线地图上插入图片画信号扩散图
java·开发语言·c#
Aevget2 小时前
MyEclipse全新发布v2025.2——AI + Java 24 +更快的调试
java·ide·人工智能·eclipse·myeclipse