华为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在线答疑。

相关推荐
a587692 分钟前
Elasticsearch核心概念与Java实战:从入门到精通
java·es
Brookty1 小时前
【JavaEE】线程安全-内存可见性、指令全排序
java·开发语言·后端·java-ee·线程安全·内存可见性·指令重排序
tellmewhoisi1 小时前
前置配置1:nacos 基本配置(注册与发现)
java
会开花的二叉树1 小时前
继承与组合:C++面向对象的核心
java·开发语言·c++
长河3 小时前
Java开发者LLM实战——LangChain4j最新版教学知识库实战
java·开发语言
Cyan_RA93 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
喵手5 小时前
玩转Java网络编程:基于Socket的服务器和客户端开发!
java·服务器·网络
再见晴天*_*6 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
hdsoft_huge9 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
雨白10 小时前
Java 多线程指南:从基础用法到线程安全
android·java