题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); String str = read.readLine(); char[] nums = str.toCharArray(); Map<String, Integer> map = new HashMap(); for (int i = 0; i < nums.length; i++) { String val = String.valueOf(nums[i]); if (map.containsKey(val)) { Integer num = map.get(val); map.put(val, num + 1); } else { map.put(val, 1); } } // 得到出现最多的key Set<String> codeSet = new HashSet(); Set<String> keySet = map.keySet(); List<String> list = new ArrayList(keySet); String key1 = list.get(0); for (int i = 0; i < list.size(); i++) { String key2 = ""; try { key2 = list.get(i + 1); } catch (Exception e) { break; } key1 = compareVal(key1, key2, map, codeSet); } for (String v : codeSet) { str = str.replaceAll(v, ""); } // Collection<Integer> val = map.values(); // int minNum = Collections.min(val); // Set<String> keySet = map.keySet(); // for(String key:keySet){ // if(map.get(key)==minNum){ // str = str.replaceAll(key, ""); // } // } System.out.println(str); } private static String compareVal(String key1, String key2, Map<String, Integer> map, Set<String> codeSet) { if (map.get(key1) > map.get(key2)) { if (!checkSame(codeSet, key2)) { codeSet.clear(); } codeSet.add(key2); return key2; } else if (map.get(key1) < map.get(key2)) { if (!checkSame(codeSet, key1)) { codeSet.clear(); } codeSet.add(key1); return key1; } // 如果相等,且此时没有数据在集合中,则两个都丢进去 if (codeSet.size() == 0) { codeSet.add(key2); codeSet.add(key1); } codeSet.add(key2); return key2; } private static boolean checkSame(Set<String> codeSet, String key) { if (codeSet.contains(key)) { return true; } return false; } }
一开始都不太清楚可以通过Collection<T> = map.values()和Collections.min()对得到最小的结果。
所以用的个很麻烦的方法,而且必须要考虑场景要考虑完全
1.如果一开始进入的时候key1和key2就一样,那么需要都放入set中
2.如果比较之后发现key1>key2,并且key2出现过,那么不添加
3.如果发现key1>key2,并且key2没有出现过。那么把之前的集合清空,再添加
#华为OD机考#