当前位置:   article > 正文

华为OD机试之连续字母长度(Java源码)_华为机考连续字母长度java

华为机考连续字母长度java

连续字母长度

题目描述

给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/739500
推荐阅读
相关标签
  

闽ICP备14008679号