笔试题小计

给定一个字符串,请设计一个高效算法,统计其中出现次数大于1的字符,并按其第一次出现的次序返回最后一个出现多次的字符。比如输入字符串为abcadefeca

输出为

因为出现次数大于1的字符按第一次出现的顺序排列,为ace,所以结果输出e

 

Java实现:

 

 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     }
View Code

 

 实现思路,先把字符串进行反转,然后放入有序的map中,然后依次往map中添加值,最后遍历map(取value大于一的第一个key)

 

原文地址:https://www.cnblogs.com/blog411032/p/8650891.html