题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
输入例子:
abcdd
输出例子:
dd
- import java.util.*;
- public class Main {
- public static void main(String[] args) {
- Scanner scan=new Scanner(System.in);
- while(scan.hasNext())
- {
- String input=scan.next();
- char[] chars=input.toCharArray();
- HashMap<Character,Integer> hm=new HashMap<Character,Integer>();
- for(Character ch:chars)
- {
- if(hm.containsKey(ch))
- {
- hm.put(ch, hm.get(ch)+1);
- }
- else
- hm.put(ch, 1);
- }
- StringBuilder str=new StringBuilder();
- Iterator it=hm.keySet().iterator();
- while(it.hasNext())
- {
- str.append(hm.get(it.next()));
- }
- //找最小值
- char[] values=str.toString().toCharArray();
- int min=Integer.parseInt(String.valueOf(values[0]));
- for(int i=1;i<values.length;i++)
- {
- if((Integer.parseInt(String.valueOf(values[i]))<min))
- {
- min=Integer.parseInt(String.valueOf(values[i]));
- }
- }
- StringBuilder min_keys=new StringBuilder();
- for(char ch:chars)
- {
- if(hm.get(ch).equals(min))
- {
- min_keys.append(ch);
- }
- }
- for(char ch:chars)
- {
- if(min_keys.toString().indexOf(ch)<0)
- {
- System.out.print(ch);
- }
- }
- //如果没下面这行会报错:
- //测试用例:swumneiiii 对应输出应该为: iiii ; 你的输出为: iiiizzzz
- System.out.println();
- }
- }
- }
方法二:
- import java.util.*;
- public class Main{
- public static void main(String[] args){
- Scanner sc=new Scanner(System.in);
- while(sc.hasNext()){
- String string=sc.nextLine();
- char[] A=string.toCharArray();
- Map<Character,Integer> m=new LinkedHashMap<Character,Integer>();
- for(char c:A)
- {
- if(!m.containsKey(c))
- {
- m.put(c,1);
- }
- else
- {
- m.put(c,m.get(c)+1);
- }
- }
- Collection<Integer> al=m.values();
- int index=Collections.min(al);
- StringBuffer sb=new StringBuffer("");
- for(char c:A){
- if(m.get(c)!=index)
- sb.append(c);
- }
- System.out.print(sb.toString());
- }
- }
- }