最长的指定瑕疵度的元音子串

2025-03-29 02:46:52阅读 12评论 0

题目描述

定义:开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为瑕疵度。比如:
“a”、“aa”是元音字符串,其瑕疵度都为0
“aiur”不是元音字符串(结尾不是元音字符)
“abira”是元音字符串,其瑕疵度为2
给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0.
子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串

解答要求
时间限制:1000ms,内存限制:256MB
输入
首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0,65535]。
接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0,65535]。
输出
输出为一个整数,代表满足条件的元音字符子串的长度。

样例
输入样例1
0
asdbuiodevauufgh
输出样例1
3
提示样例1
满足条件的最长元音字符子串有两个,分别为uio和auu,长度为3。

输入样例2
2
aeueo
输出样例2
0
提示样例2
没有满足条件的元音字符子串,输出0.

输入样例3
1
aabeebuu
输出样例3
5
提示样例3
满足条件的最长元音字符子串有两个,分别为aabee和eebuu,长度为5

代码实现

package com.zhanghuan.material;

import java.util.*;

public class Test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String str = scanner.next();

        // 创建一个HashMap,用于存储元音字母及其对应的索引位置
        Map<Character, Integer> map = new HashMap<>();
        map.put('a', 1);
        map.put('e', 1);
        map.put('i', 1);
        map.put('0', 1);
        map.put('u', 1);

        // 创建一个List,用于存储符合条件的字符串
        List<String> list = new ArrayList<>();

        for (int i = 0; i < str.length(); i++) {
            //统计瑕疵个数
            int count = 0;
            //截取i后面的字符串
            String substring = str.substring(i, str.length());
            for (int j = 0; j < substring.length(); j++) {
                char c = substring.charAt(j);
                if (!map.containsKey(c)) {
                    count++;
                }

                // 如果瑕疵个数等于瑕疵数,则存放截取字符串
                if (count == n){
                    String string = substring.substring(0, j+1);
                    list.add(string);
                }
                // 瑕疵个数大于瑕疵数,则跳出循环
                if (count > n){
                    break;
                }
            }

        }

        // 找到最长的字符串的长度并输出
        int max = 0;
        for (int i = 0; i < list.size(); i++) {
            int length = list.get(i).length();
            if (length > max) {
                max = length;
            }
        }
        System.out.println(max);
    }

}

还没有评论,来说两句吧