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

相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot