java实现连续字母长度统计
描述
给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第k长的子串的长度,相同字母只取最长的那个子串。
输入描述:
第一行有一个子串(1<长度<=100),只包含大写字母;
第二行为 k的值。
输出描述:
输出连续出现次数第k多的字母的次数。
用例:
输入:
AAAAHHHBBCDHHHH
3
输出:
2
java代码实现(开箱即用)
package com.des.data.test;
import java.util.*;
public class ContinuousLetterLength {
public static void main(String[] args) {
String str = "AAAAHHHBBCDHHHH";
String str1 = "AABAAA";
String str2 = "ABC";
String str3 = "ABC";
int k = 2;
System.out.println(klen(str2, k));
}
public static int klen(String str, int k) {
HashMap<Character, Integer> resMap = new HashMap<>();
char st = str.charAt(0);
int len = 1;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (st == c) {
len++;
continue;
}
if (!resMap.containsKey(c) || resMap.get(c) < len) {
resMap.put(c, len);
}
len = 1;
st = c;
}
List<Integer> ins = new ArrayList<>(resMap.values());
Collections.sort(ins);
if (ins.size() < k) {
return -1;
}
return ins.get(ins.size() - k);
}
}