赞
踩
题目描述
给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。
输入描述
第一行有一个子串(1<长度<=100),只包含大写字母。
第二行为 k的值
输出描述
输出连续出现次数第k多的字母的次数。
输入 | 输出 | 说明 |
---|---|---|
AAAAHHHBBCDHHHH 3 | 2 | 同一字母连续出现的最多的是A和H,四次; 第二多的是H,3次,但是H已经存在4个连续的,故不考虑; 下个最长子串是BB,所以最终答案应该输出2 |
AABAAA 2 | 1 | 同一字母连续出现的最多的是A,三次; 第二多的还是A,两次,但A已经存在最大连续次数三次,故不考虑; 下个最长子串是B,所以输出1。 |
源码与解析
解析:
可以考虑将字符例如A与其出现的次数写入Map对象 ,A下次出现的次数如果比上次多,就替换,否则就不管 例如 AABAAA=》 {A:2}=>{A:2,B:1}=>{A:3,B:1}
将集合还原为字符串转换到List中 [AAA,B]
List按字符的长度来排序(大到小) 输出顺序对应的位置的字符即可
示例代码:
import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class T16 { public static void main(String[] args) { String input = "AAAAHHHBBCDHHHH"; int index = 1; String temStr = getSameCharacter(input); Map<Character, Integer> map = new HashMap<Character, Integer>(); map.put(temStr.charAt(0), temStr.length()); while (input.replaceFirst(temStr, "").length() > 0) { input = input.replaceFirst(temStr, ""); temStr = getSameCharacter(input); if (map.get(temStr.charAt(0)) == null) { map.put(temStr.charAt(0), temStr.length()); continue; } // 原来的小于当前 否则不换 if (map.get(temStr.charAt(0)) < temStr.length()) { map.put(temStr.charAt(0), temStr.length()); } } ArrayList<String> strList = new ArrayList<>(); Set<Character> keySet = map.keySet(); Iterator<Character> it = keySet.iterator(); while (it.hasNext()) { Character character = it.next(); Integer len = map.get(character); StringBuilder str = new StringBuilder(); for (int i = 0; i < len; i++) { str.append(character); } strList.add(str.toString()); } strList.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { if (o1.length() > o2.length()) return -1; if (o1.length() < o2.length()) return 1; return 0; } }); System.out.println(strList); System.out.println(strList.get(index - 1).length()); // System.out.println(map); } // 取某个字符串中首字母连续出现字符 public static String getSameCharacter(String str) { StringBuilder result = new StringBuilder(); if (str.trim().length() == 0) return null; String firstCharacter = str.charAt(0) + ""; while (str.startsWith(firstCharacter)) { result.append(firstCharacter); str = str.replaceFirst(firstCharacter, ""); } return result.toString(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。