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

相关推荐
敲代码娶不了六花1 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
Yhame.1 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
是小崔啊3 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL3 小时前
linux安装idea
java·ide·intellij-idea
青春男大3 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
问道飞鱼4 小时前
【知识科普】认识正则表达式
数据库·mysql·正则表达式
HaiFan.4 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)4 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
music0ant4 小时前
Idea 添加tomcat 并发布到tomcat
java·tomcat·intellij-idea
计算机徐师兄5 小时前
Java基于SSM框架的无中介租房系统小程序【附源码、文档】
java·微信小程序·小程序·无中介租房系统小程序·java无中介租房系统小程序·无中介租房微信小程序