解题思路:  先判断检查字符长度和输入字符长度一样,然后再判每个字符出现的次数是否一样。

                分步骤判断即可。

注意事项:

参考代码:

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

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * 题目 2085: [蓝桥杯][算法提高VIP]P1003
		 * 
		 * 时间限制: 1Sec 内存限制: 128MB 提交: 315 解决: 74
		 * 
		 * 题目描述
		 * 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查
		 * 。请编写一个程序
		 * ,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词
		 * 。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
		 */
		Scanner scanner = new Scanner(System.in);
		String[] arr = scanner.nextLine().split("\\ ");
		String[] arr2 = scanner.nextLine().split("\\ ");
		for (String a : arr) {
			for (int i = 0; i < arr2.length; i++) {
				Map<Character, Integer> hasmp = new HashMap<Character, Integer>();// 输入字符字母各出现次数
				Map<Character, Integer> havemp = new HashMap<Character, Integer>();// 查找关键字字符字母各出现次数
				if (a.length() == arr2[i].length()) { // 先确认长度是否相等
					for (char c : a.toCharArray()) { // 再确认是否有包含字母
						if (havemp.containsKey(c)) {
							havemp.put(c, havemp.get(c) + 1);
						} else {
							havemp.put(c, 1);
						}
					}
					for (char c : arr2[i].toCharArray()) {
						if (hasmp.containsKey(c)) {
							hasmp.put(c, hasmp.get(c) + 1);
						} else {
							hasmp.put(c, 1);
						}

					}
					//当长度相等,字符出现次数相等 及输出
					int count = 0;
					for (char k : hasmp.keySet()) {
						if (hasmp.get(k) != havemp.get(k)) {
							count++;
						}
					}
					if (count == 0) {
						System.out.print(a + " ");
					}
				}
			}
		}

	}

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论