——删除字符串中出现次数最少的字符

本文介绍了一种算法,该算法用于从字符串中删除出现次数最少的字符,并提供了两种Java实现方法。输入字符串仅包含小写字母,且长度不超过20个字节。通过使用HashMap记录字符出现次数并找出最小频率的字符进行删除,最终输出处理后的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:

删除字符串中出现次数最少的字符后的字符串。

输入例子:
abcdd
输出例子:
dd
方法一:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.util.*;  
  2. public class Main {  
  3.   
  4.     public static void main(String[] args) {  
  5.   
  6.         Scanner scan=new Scanner(System.in);  
  7.         while(scan.hasNext())  
  8.         {  
  9.             String input=scan.next();  
  10.             char[] chars=input.toCharArray();  
  11.             HashMap<Character,Integer> hm=new HashMap<Character,Integer>();  
  12.             for(Character ch:chars)  
  13.             {  
  14.                 if(hm.containsKey(ch))  
  15.                 {  
  16.                     hm.put(ch, hm.get(ch)+1);  
  17.                 }  
  18.                 else  
  19.                     hm.put(ch, 1);  
  20.             }  
  21.             StringBuilder str=new StringBuilder();  
  22.             Iterator it=hm.keySet().iterator();  
  23.             while(it.hasNext())  
  24.             {  
  25.                 str.append(hm.get(it.next()));  
  26.             }  
  27.             //找最小值  
  28.             char[] values=str.toString().toCharArray();  
  29.             int min=Integer.parseInt(String.valueOf(values[0]));  
  30.             for(int i=1;i<values.length;i++)  
  31.             {  
  32.                 if((Integer.parseInt(String.valueOf(values[i]))<min))  
  33.                 {  
  34.                     min=Integer.parseInt(String.valueOf(values[i]));  
  35.                 }  
  36.             }  
  37.             StringBuilder min_keys=new StringBuilder();  
  38.             for(char ch:chars)  
  39.             {  
  40.                 if(hm.get(ch).equals(min))  
  41.                 {  
  42.                     min_keys.append(ch);  
  43.                 }  
  44.             }  
  45.               
  46.             for(char ch:chars)  
  47.             {  
  48.                 if(min_keys.toString().indexOf(ch)<0)  
  49.                 {  
  50.                     System.out.print(ch);  
  51.                 }  
  52.             }  
  53.             //如果没下面这行会报错:  
  54.             //测试用例:swumneiiii   对应输出应该为: iiii ; 你的输出为: iiiizzzz  
  55.             System.out.println();  
  56.         }  
  57.     }  
  58. }  

方法二:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.util.*;  
  2. public class Main{  
  3.     public static void main(String[] args){  
  4.         Scanner sc=new Scanner(System.in);  
  5.         while(sc.hasNext()){  
  6.                
  7.         String string=sc.nextLine();  
  8.         char[] A=string.toCharArray();  
  9.         Map<Character,Integer> m=new LinkedHashMap<Character,Integer>();  
  10.          
  11.         for(char c:A)  
  12.         {  
  13.             if(!m.containsKey(c))  
  14.             {  
  15.                  m.put(c,1);  
  16.             }  
  17.             else  
  18.             {  
  19.                 m.put(c,m.get(c)+1);  
  20.             }       
  21.         }  
  22.         Collection<Integer> al=m.values();  
  23.         int index=Collections.min(al);  
  24.         StringBuffer sb=new StringBuffer("");  
  25.         for(char c:A){  
  26.             if(m.get(c)!=index)  
  27.                 sb.append(c);  
  28.         }  
  29.         System.out.print(sb.toString());  
  30.        }  
  31.     }  
  32. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值