题目描述:
编写一个函数void strcompress(char *s),输入一个字符串(只包含小写字母和空格,且长度小于1000),然后采用如下的规则对该字符串当中的每一个字符进行压缩:
(1) 如果该字符是空格,则保留该字符。
(2) 如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符。
(3) 否则,删除该字符。
例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:ocurenc。
编写main函数测试该函数的正确性。
输入:
occurrence
输出:
ocurenc
解题思路:
利用map存储键值对的特征,字符用作key,出现次数用作value。将符合次数的字符拼接并输出。还要注意单独处理空格。
java代码:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
Map<Character,Integer> map = new HashMap<>();
StringBuilder builder = new StringBuilder();
for(int i = 0; i < str.length();i++) {
char c = str.charAt(i);
Integer value = map.get(c);
if(c == ' ') {
builder.append(c);
}
if(value == null) {
map.put(c, 1);
builder.append(c);
}else {
map.put(c, value + 1);
if(value == 2 || value == 5) {
builder.append(c);
}
}
}
System.out.println(builder.toString());
}
}
提交截图: