试题 算法训练 P0804 java 题解 976

题目描述:

编写一个函数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());
	}
}

提交截图:

 

猜你喜欢

转载自blog.csdn.net/weixin_48898946/article/details/121575327