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

Posted Bug挖掘机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法删除字符串中出现次数最少的字符相关的知识,希望对你有一定的参考价值。

题目描述

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

方法一

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class removetheleast
//删除字符串中出现次数最少的字符
public static String removetheleast()
//输入
Scanner s1 = new Scanner(System.in);
String input_str = s1.nextLine();
char[] c1 = input_str.toCharArray();

//统计字符出现的次数
Map<Character, Integer> m1 = new HashMap<>();
for (int i = 0; i < c1.length; i++)
if (m1.containsKey(c1[i]))
m1.put(c1[i], m1.get(c1[i]) + 1);
else
m1.put(c1[i], 1);



ArrayList<Character> list_min = new ArrayList<>();
int min = 800;
for (char j : m1.keySet())
if (m1.get(j) < min)
min = m1.get(j);
list_min.clear();
list_min.add(j);
else if (m1.get(j) == min)
list_min.add(j);



String res = "";
//清除最少的字符串
for (int x = 0; x < c1.length; x++)
if (!list_min.contains(c1[x]))
res += c1[x];


return res;

方法二(使用到StringBuilder)

import java.util.*;

public class Main
public static void main(String[] args)
Scanner in = new Scanner(System.in);
while(in.hasNext())
String s = in.nextLine();
int[] a = new int[26];
for(int i=0;i<s.length();i++)
a[s.charAt(i)-97]++;

int min = 21;
//找出出现最小的次数
for(int i=0;i<26;i++)
if(a[i]<min && a[i]>0)
min = a[i];


StringBuilder toBeDeleted = new StringBuilder();
for(int i=0;i<26;i++)
if(a[i]==min)
char c = (char)(a+i);
toBeDeleted.append(c);


String str = toBeDeleted.toString();
StringBuilder res = new StringBuilder();
for(int i=0;i<s.length();i++)
if(!str.contains(s.charAt(i)+""))
res.append(s.charAt(i));


System.out.println(res);



参考链接​


以上是关于算法删除字符串中出现次数最少的字符的主要内容,如果未能解决你的问题,请参考以下文章

算法分析---删除字符串中出现次数最少的字符

华为OD机试 - 删除最少字符(JavaScript) | 机试题+算法思路+考点+代码解析 2023

华为机试题 HJ23删除字符串中出现次数最少的字符

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

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

华为机试:删除字符串中出现次数最少的字符