13
while True:
try:
a=input()
b=[]
c=''
for i in range(len(a)):
b.append(a.count(a[i]))
for i in range(len(a)):
if min(b)!=b[i]:
c=c+a[i]
print(c)
except:
break
发表于 2018-08-04 23:21:06
回复(6)
72
#include
#include
using namespace std;
int main()
{
int i, m,min;
int a[26];
string str,temp;
while (cin >> str)
{
for (int i = 0; i < 26; i++)
a[i] = 0;
m = str.size();
for (i = 0; i
a[str[i]-'a']++;
min = a[str[0]-'a'];
for (i = 0; i
if (a[str[i] - 'a'] <= min)
min = a[str[i]-'a'];
for (i = 0; i < m; i++)
if (a[str[i] - 'a'] > min)
cout << str[i];
cout << endl;
}
return 0;
}
发表于 2016-04-10 14:26:42
回复(38)
24
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 m=new LinkedHashMap();
for(char c:A){
if(!m.containsKey(c)){
m.put(c,1);
}else{
m.put(c,m.get(c)+1);
}
}
Collection 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.println(sb.toString());
}
}
}
编辑于 2021-03-03 16:02:00
回复(21)
9
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
a[s.charAt(i)-97]++;
}
int min = 21;
//找出出现最小的次数
for(int i=0;i<26;i++){
if(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
if(!str.contains(s.charAt(i)+"")){
res.append(s.charAt(i));
}
}
System.out.println(res);
}
}
}
发表于 2016-04-03 19:15:18
回复(2)
22
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
int[] num = new int[26];
String line = cin.nextLine();
for(int i=0; i
char c = line.charAt(i);
int n = (int)(c - 'a');
num[n] ++;
}
int min = Integer.MAX_VALUE;
for(int i=0; i<26; i++) {
if(num[i] != 0 && num[i] < min) {
min = num[i];
}
}
for(int i=0; i
char c = line.charAt(i);
int n = (int)(c - 'a');
if(num[n] != min) {
System.out.print(c);
}
}
System.out.println();
}
}
}
发表于 2016-03-29 11:01:32
回复(13)
24
python3的解法,
使用defaultdict来做的。 from collections import defaultdict
while True:
try:
a = input()
dd = defaultdict(int)
for i in a:
dd[i] += 1
for i in dd:
if dd[i] == min(dd.values()):
a = a.replace(i, "")
print(a)
except:
break
发表于 2017-09-06 14:18:31
回复(5)
7
一种新的编程思想:
1、将26个字母转换成1-26个数字来存储,来比较;
2、数组新用法:用数组索引来代表具体的数字,用具体索引锁存的数字来代表出现的次数import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
String str = sc.nextLine();
int[] num = new int[26];//将字符转换为数字,存放在数组中
for(int i=0; i
char ch = str.charAt(i);
int n = (int)(ch - 'a');
num[n] ++;
}
int min = Integer.MAX_VALUE;//当不知有多少重复次数时的固定操作
for(int i=0; i<26; i++) {
if(num[i] != 0 && num[i] < min) {
min = num[i];
}
}
for(int i=0; i
char ch = str.charAt(i);
int n = (int)(ch - 'a');
if(num[n] != min) {
System.out.print(ch);
}
}
System.out.println();//平台本身问题,需要输出这一句
}
}
}
发表于 2018-08-07 12:06:52
回复(4)
7
#include
#include
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{ int a[26]={0};
for(int i=0;i
{
a[str[i]-'a']++;
}
int min=a[str[0]-'a'];
for(int i=0;i
{
if(a[str[i]-'a']<=min)
min=a[str[i]-'a'];
}
for(int i=0;i
{
if(a[str[i]-'a']>min)
cout<
}
cout<
}
return 0;
}
发表于 2016-07-14 22:53:51
回复(7)
4
初始化min=1,建一个map,存Character和Integer,然后循环遍历字符串,存到map里,如果已经存在那
value+1,比较value和min,更新min,循环结束后在遍历字符串,只要map.get(当前char)的值不等于
min,那么就输出,最后在加上一个System.out.println()就不会出先拿个iiiizzzz
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
/**
* 题目描述实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
* 输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
* 输入描述:字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
* 输出描述:删除字符串中出现次数最少的字符后的字符串。
* 输入:abcdd
* 输出:dd
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine();
int min=1;
Map map=new HashMap();
for(int i=0;i
char c=str.charAt(i);
if(map.containsKey(c)){
map.put(c, map.get(c)+1);
}else{
map.put(c,1);
}
if(map.get(c)
min=map.get(c);
}
}
for(int i=0;i
char s=str.charAt(i);
if(map.get(s)!=min){
System.out.print(s);
}
}
System.out.println();
}
}
}
发表于 2018-07-12 14:44:57
回复(8)
4
纯 c
#include
#include
int main(){
char a[20];
while(scanf("%s",a)!=EOF)
{
int b[26];
for(int i=0;i<26;i++)
b[i]=0;
int min=0;
for(int i=0;i
b[a[i]-'a']++;
min=b[a[0]-'a'];
for(int i=0;i
if((b[a[i]-'a'])<=min)min=b[a[i]-'a'];
for(int i=0;i
if((b[a[i]-'a'])>min) printf("%c",a[i]);
memset( a, 0, sizeof(a) ); //clear a[20]
printf("\n");//vs能运行,到这里就得加换行符
}
//system("pause");
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
string str;
while(cin>>str)//不能用getline(cin,str)
{
int len=str.size();
int arry[26]={0};
int min=0;
for(int i=0;i
{
++arry[str[i]-'a'];
}
min=arry[str[0]-'a'];
for(int i=0;i
{
if(arry[str[i]-'a']<=min)
min=arry[str[i]-'a'];
}
for(int i=0;i
{
if(arry[str[i]-'a']>min)
cout<
}
cout<
}
return 0;
}
编辑于 2018-06-01 20:22:46
回复(1)
4
//先建表,再根据表判断哪些元素是要删除的。
//删除时,(2)方法能在O(n)时间O(1)空间内完成。
#include
#include
using namespace std;
int main() {
string str;
while (cin >> str) {
int mp[26] = { 0 };
for (int i = 0; i < str.size(); ++i)
mp[str[i] - 'a']++;
int min = 10000;
for (int i = 0; i < 26; ++i) {
if (mp[i] != 0 && mp[i] < min) min = mp[i];
}
//(1)当数据量很大时,这肯定耗时
/*for (int i = 0; i < str.size(); ) {
if (mp[str[i] - 'a'] == min)
str.erase(i, 1);
else ++i;
}
cout << str << endl;*/
//(2)前后交换
int i = 0, j = 0;
while(j < str.size()) {
if(i >= j || mp[str[j] - 'a'] == min) j++;
else if(mp[str[i] - 'a'] == min)
swap(str[i++], str[j++]);
else ++i;
}
cout << str.substr(0,i) << endl;
}
return 0;
}
发表于 2017-06-14 21:53:33
回复(2)
3
解题思路:1.首先,统计出每个字符在字符串中出现的次数,存放在动态数组num 中
2.然后,寻找数组num中的最小值
3.最后,若num[i]==min,则字符串中的第i个字符跳过,其他字符输出
C++实现代码:
#include #include
using namespace std;
int findmin(int *p,int n);
int main()
{
string str;
while(getline(cin,str))
{
int len=0,i,j;
while(str[++len]);
int *num=new int[len];
for(i=0;i
{
num[i]=0;
for(j=0;j
{
if((str[i]==str[j])&&(i!=j))
{
num[i]++;
}
}
}
int min=findmin(num,len);
for(i=0;i
{
if(num[i]==min)
{
continue;
}
cout<
}
cout<
delete []num;
}
return 0;
}
int findmin(int *p,int n)
{
int min=p[0];
for(int i=0;i
{
if(min>p[i])
{
min=p[i];
}
}
return min;
}
发表于 2019-08-22 08:48:43
回复(1)
3
import sys
for s in sys.stdin:
s=s.strip()
count=s.count(s[0])
res=''
for i in s:
count=s.count(i) if s.count(i)
for i in range(len(s)):
if s.count(s[i])>count:
res+=s[i]
print res
发表于 2018-09-14 16:17:26
回复(2)
3
这里我使用hashmap记录每个字符出现的次数,然后通过iterator对集合进行遍历查找min相同的值的char,通过replace正则表达式将这些字符全部都替换成""字符串输出即可 import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String str = in.next();
Map map = new HashMap();
int min = 100000;
for(int i=0; i
char c = str.charAt(i);
if (map.containsKey(c)) {
int val = map.get(c);
map.put(c, val + 1);
if (val < min)
min = val;
continue;
}
map.put(c, 0);
min = 0;
}
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
char c = it.next();
if(map.get(c) == min)
str = str.replaceAll("["+c+"]*", "");
}
System.out.println(str);
}
in.close();
}
}
发表于 2017-09-14 13:45:28
回复(3)
3
#include
#include
#include
#include
using namespace std;
int main(){
string s;
while(cin>>s) {
//因为这里只有26个小写字母,用一个int[26]其实就足够了。。懒得改了
unordered_map freq;
int smallest = 1;
for(char c : s) {
freq[c]++;
smallest = min(smallest,freq[c]);
}
for(char c : s){
if(freq[c]==smallest)
continue;
cout<
}
cout<
}
return 0;
}
发表于 2017-08-02 17:16:02
回复(4)
4
该题的思路是:从题目要求来看,最基本的是要知道输入字符串中每个字符出现的次数,即,很显然这可以用Map来实现,根据求出现次数最少可以用根据value排序的TreeMap来实现,去除当中value等于最小值的字符,以下是代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
/**
*
* @author 云上奔跑
* @date 2017年5月1日 下午12:24:13
*/
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while (sc.hasNextLine()) {
String str=sc.nextLine();
//利用Map来处理
Map treeMap=new TreeMap();
for(int i=0;i
if(treeMap.containsKey(str.charAt(i))){
treeMap.put(str.charAt(i), treeMap.get(str.charAt(i))+1);
}else {
treeMap.put(str.charAt(i), 1);
}
}
//因为要根据value来排序,所以转换成list,重写sort
List> list=new ArrayList>(treeMap.entrySet());
Collections.sort(list, new Comparator>() {
//升序
@Override
public int compare(Entry o1, Entry o2) {
// TODO Auto-generated method stub
return o1.getValue().compareTo(o2.getValue());
}
});
int min=1;
if(list!=null){
//获取list第一个value值,即最小值
min=list.get(0).getValue();
}
//去除出现次数最少的字符
for (Entry entry : list) {
if(entry.getValue()!=min){
break;
}else {
str=str.replace(entry.getKey().toString(), "");
}
}
System.out.println(str);
}
sc.close();
}
}
发表于 2017-05-01 12:24:32
回复(0)
2
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while (sc.hasNext()) {
String target=sc.nextLine();
String min=minString(target);
char[] ch=target.toCharArray();
String res="";
for (int i = 0; i < ch.length; i++) {
if (min.indexOf(ch[i])==-1) {
res+=ch[i];
}
}
System.out.println(res);
}
}
public static String minString (String str) {
char[] ch=str.toCharArray();
int[] count=new int[26];
for (int i = 0; i < ch.length; i++) {
count[ch[i]-'a']+=1;
}
for (int i = 1; i < 13; i++) {
char[] temp = new char[20];
int k=0;
int num=0;
for (int j = 0; j < count.length; j++) {
if (count[j]==i) {
num++;
temp[k++]=(char) (j+'a');
}
}
if (num>0) {
return String.valueOf(temp);
}
}
return null;
}
}
首先想到的是 做一个count[26]的数组记录 个字母出现的次数,然后删除最小值所在字母,但是存在的问题是 最小值可能存在多个。
为了解决可能存在多个的情况,可以从双层遍历数组,外层从1到26(事实上13就够了)为当前可能出现的最小值,内层为遍历数组。如果存在count[*]==i,则这个count[*]就是最小值,遍历完数组 统计最小值的个数num 并将该字符添加到字符串中,如果num>0跳出 返回。
得到含最小出现次数的字符组成的字符串min,然后依次遍历原字符串字符 看是否包含在min中,在则删除
写的比较繁琐
发表于 2018-03-06 14:15:19
回复(0)
2
map是真的好用 #include
#include
#include
using namespace std;
int main(){
string str;
while(cin>>str){
map M;
int min=999;
for(char i='a';i<='z';i++){
M[i]=0;
}
for(int i=0;i
M[str[i]]++;
if(M[str[i]]
}
for(int i=0;i
if(M[str[i]]!=min) cout<
}
cout<
}
return 0;
}
发表于 2018-02-22 11:41:29
回复(2)
2
package HUAWEI;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 删除字符串中出现次数最少的字符
* @author Administrator
*
*/
public class Demo23 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = sc.next();
convert(s);
}
sc.close();
}
public static void convert(String s){
String result = "";
LinkedHashMap map = new LinkedHashMap<>();
for(int i=0;i
char temp = s.charAt(i);
if(map.containsKey(temp)){
int value = map.get(temp);
value++;
map.put(temp,value);
}else{
map.put(temp,1);
}
}
int min = Collections.min(map.values());
LinkedHashMap map_del = new LinkedHashMap<>();
for(Map.Entry entry:map.entrySet()){
if(entry.getValue()==min){
map_del.put(entry.getKey(),entry.getValue());
}
}
for(int i=0;i
char temp = s.charAt(i);
if(!map_del.containsKey(temp)){
result = result + String.valueOf(temp);
}
}
System.out.println(result);
}
}
发表于 2016-11-12 20:39:23
回复(0)
2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {//注意while处理多个case
String str = sc.nextLine();
int[] biao = new int[26];
int i = 0;
for(i=0;i
biao[str.charAt(i) - 97]++;
}
int min = 0;
for(i=0;i<26;++i){
if(biao[i]!=0){
min = biao[i];
break;
}
}
for(i=0;i<26;++i){
if(biao[i]!=0 && biao[i]
min = biao[i];
}
StringBuilder sb = new StringBuilder(str);
int j = 0;
for(i=0; i<26; ++i){
for(j = 0;j
if(biao[i] == min && str.charAt(j) == (char)(i+97)){
sb.delete(j, j+1);
str = sb.toString();
}
}
}
System.out.println(sb.toString());
}
}
}
发表于 2016-09-23 14:09:19
回复(0)