您的位置:首页 > 其它

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。

2016-12-26 20:21 507 查看

题目描述

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

输入描述:

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

输出描述:

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

输入例子:

abcdd


输出例子:

dd


import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
char[] ch = str.toCharArray();
Map<Character,Integer> map = new TreeMap<>();
//遍历字符数组,统计每个字符出现的次数并存放在Map中(key:字符;value:出现次数)。
for (int i = 0; i < ch.length; i++) {
Integer freq = map.get(ch[i]);
map.put(ch[i], (freq==null)?1:freq+1);
}
int number = Integer.MAX_VALUE;
//list存放出现次数最少的字符
ArrayList<Character> list = new ArrayList<>();
//找出出现最少的字符
for (int i = 0; i < ch.length; i++) {
if(map.get(ch[i]) < number){
number = map.get(ch[i]);
list.clear();
list.add(ch[i]);
}else if(map.get(ch[i]) == number){
list.add(ch[i]);
}
}
//删除
for (char c : list) {
str = str.replace(String.valueOf(c), "");
}
System.out.println(str);
}
sc.close();
}
}

此题不用Map这种数据结构也可以解答,利用数组即可实现。其实原理和Map类似,充分利用了数组下标。
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
String str=scan.nextLine();
if(str.length()>20){
continue;
}
int []max=new int[26];
char[]ch=str.toCharArray();
int min=Integer.MAX_VALUE;
for(int i=0;i<ch.length;i++){
max[ch[i]-'a']++;
min=min>max[ch[i]-'a']?max[ch[i]-'a']:min;
}
for(int i=0;i<max.length;i++){
if(max[i]==min){
str=str.replaceAll(String.valueOf((char)(i+97)), "");
}
}
System.out.println(str);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐