原题链接:蓝桥杯算法提高VIP-P1003
解题思路: 先判断检查字符长度和输入字符长度一样,然后再判每个字符出现的次数是否一样。
分步骤判断即可。
注意事项:
参考代码:
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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复