给定一个字符串,请设计一个高效算法,统计其中出现次数大于1的字符,并按其第一次出现的次序返回最后一个出现多次的字符。比如输入字符串为abcadefeca
输出为
因为出现次数大于1的字符按第一次出现的顺序排列,为ace,所以结果输出e。
Java实现:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void getChar(String str) { 2 StringBuffer strB = new StringBuffer(str); 3 str = strB.reverse().toString(); 4 char[] ch = str.toCharArray(); 5 LinkedHashMap<Character, Integer> map = new LinkedHashMap<>(); 6 for (char c : ch) { 7 if (!map.containsKey(c)) { 8 map.put(c, 1); 9 } else { 10 Integer n = map.get(c); 11 map.remove(c); 12 map.put(c, n + 1); 13 } 14 } 15 16 Iterator<Character> ite = map.keySet().iterator(); 17 while (ite.hasNext()) { 18 Character key = ite.next(); 19 Integer n = map.get(key); 20 if (n > 1) { 21 System.out.println(key); 22 break; 23 } 24 } 25 26 }
实现思路,先把字符串进行反转,然后放入有序的map中,然后依次往map中添加值,最后遍历map(取value大于一的第一个key)