汉中微信网站建设公司,做城市网站的标语,广州建网站新科网站建设,汉川市建设局网站一、题目描述
给定一个字符串#xff0c;只包含大写字母#xff0c;求在包含同一字母的子串中#xff0c;长度第 k 长的子串的长度#xff0c;相同字母只取最长的那个子串。
二、输入描述
第一行有一个子串(1长度100)#xff0c;只包含大写字母#xff1b;第二…
一、题目描述
给定一个字符串只包含大写字母求在包含同一字母的子串中长度第 k 长的子串的长度相同字母只取最长的那个子串。
二、输入描述
第一行有一个子串(1长度100)只包含大写字母第二行为 k的值
三、输出描述
输出连续出现次数第k多的字母的次数。
四、解题思路
读取输入的字符串和 k 值将字符串转换为字符数组使用 HashMap 统计每个字符连续出现的次数遍历字符数组记录当前字符和连续出现次数更新字符的最大连续出现次数将字符和最大连续出现次数存储在 HashMap 中将 HashMap 转换为 List并按照值的降序进行排序判断 k 是否超过了 List 的长度如果超过则输出 -1否则输出第 k 个元素的值输出最终结果。
五、Java算法源码
public static void main(String[] args) {Scanner scanner new Scanner(System.in);char[] arr (scanner.nextLine()).toCharArray();int k scanner.nextInt();MapCharacter, Integer map new HashMapCharacter, Integer();char current arr[0];char temp;int count 0;for (int i 0; i arr.length; i) {temp arr[i];if (temp current) {// 相等数量加1count;} else {// 重置统计参数current temp;count 1;}// 记录if (map.containsKey(current)) {map.put(current, Math.max(map.get(current), count));} else {map.put(current, count);}}// 根据次数排序从高到底ListMap.EntryCharacter, Integer list new ArrayList(map.entrySet());list.sort((o1, o2) - o2.getValue().compareTo(o1.getValue()));// 打印第k多次的子串字母出现次数if (k list.size()) {System.out.println(-1);} else {System.out.println(list.get(k - 1).getValue());}
}六、效果展示
1、输入
qqwwweeeerrrrrtttttt 3
2、输出
第三长的字符的个数很明显就是eeee4。
3、说明
同一字母连续出现的最多的是t6次第二多的还是r5次第三多的就是e一共4个e所以输出4。 下一篇华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】附详细解题思路
本文收录于华为OD机试JAVA20222023
每一题都有详细的答题思路、详细的代码注释、样例测试订阅后专栏内的文章都可看可加入华为OD刷题群私信即可发现新题目随时更新全天CSDN在线答疑。