VIRTUALS

the virtual labs for the virtuals

0%

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

摘要:
简单的计次问题。

题目

描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:
删除字符串中出现次数最少的字符后的字符串。

示例1

输入:
abcdd
aabcddd

输出:
dd
aaddd


计次

只需将每个字符的出现次数记录下来,找到最小出现次数,再构建答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* author: etoa
* code at: 2021-08-20 13:37:27
**/
#include <bits/stdc++.h>

using namespace std;

constexpr int N = 128;
int cnt[N];

int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
string s;
for (; cin >> s; memset(cnt, 0, sizeof cnt)) {
for (int i = 0, n = s.size(); i < n; i++) {
cnt[s[i]]++;
}
int minval = 0x3f3f3f3f;
for (int i = 97; i < 123; i++) {
if (cnt[i]) minval = min(minval, cnt[i]);
}
string res;
for (int i = 0, n = s.size(); i < n; i++) {
if (cnt[s[i]] != minval) res += s[i];
}
cout << res << endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* author: etoa
* code at: 2021-08-20 13:44:39
**/
import java.util.*;

public class Main {

private static final int N = 128;
private static int[] cnt = new int[N];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (; in.hasNext(); Arrays.fill(cnt, 0x0)) {
String s = in.next();
for (int i = 0, n = s.length(); i < n; i++) {
char c = s.charAt(i);
cnt[c]++; // 类型自动提升
}
int mn = 0x3f3f3f3f;
for (int i = 97; i < 123; i++) {
if (cnt[i] != 0) mn = Math.min(mn, cnt[i]);
}
StringBuilder res = new StringBuilder();
for (int i = 0, n = s.length(); i < n; i++) {
if (cnt[s.charAt(i)] != mn) res.append(s.charAt(i));
}
System.out.println(res.toString());
}
}
}