最长的指定瑕疵度的元音子串
题目描述
定义:开头和结尾都是元音字母(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);
}
}还没有评论,来说两句吧
