目录
匿名信
题目描述:
电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字
剪切下来,剪拼成匿名信。
现在有一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。
但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个字母的顺序。
解释:单词
'on'
允许通过单词
'no'
进行替代。
报纸代表
newspaper
,
匿名信代表
anonymousLetter
,
求报纸内容是否可以拼成匿名信。
输入描述
第一行输入
newspaper
内容,包括
1
-
N
个字符串,用空格分开
第二行输入
anonymousLetter
内容,包括
1
-
N
个字符串,用空格分开
1
、
newspaper
和
anonymousLetter
的字符串由小写英文字母组成且每个字母只能使用一次
2
、
newspaper
内容中的每个字符串字母顺序可以任意调整
,
但必须保证字符串的完整性
(
每个字符串不
能有多余字母
)
3
、
1
<
N
<
100
,
1
<=
newspaper
.
length
,
anonymousLetter
.
length
<=
10
输出描述:
如果报纸可以拼成匿名信返回
true
,否则返回
false
示例:
示例 1输入 :ab cdab输出: true示例 2输入:ab efaef输出: false示例 3输入:ab bcd efcbd fe输出: true示例 4输入:ab bcd efcd ef输出: false示例 5输入:wood wood woodwodo wdoo输出: true示例 6输入:woodwodo wood输出: false
Java实现 (期待看官能够修复一下, 害):
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String newspaper = scanner.nextLine();
String anonymous = scanner.nextLine();
String[] newspaperArray = newspaper.split(" ");
String[] anonymousArray = anonymous.split(" ");
TreeSet<String> set = new TreeSet<>();
for (String news : newspaperArray) {
char[] charArray = news.toCharArray();
Arrays.sort(charArray);
String value = String.valueOf(charArray);
if (!set.contains(value)) {
set.add(value);
}
}
boolean canAppend = true;
for (String anonymousStr : anonymousArray) {
char[] anonymousCharArray = anonymousStr.toCharArray();
Arrays.sort(anonymousCharArray);
String sortedAnonymous = String.valueOf(anonymousCharArray);
//set里面没有拼出来 就返回false
if (!set.contains(sortedAnonymous)) {
canAppend = false;
break;
}
}
System.out.println(canAppend ? "true" : "false");
}
二、积木游戏
题目描述:
小华和小薇一起通过玩积木游戏学习数学。
他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。
小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的
2
块积木块,计
算他们的距离。
小薇请你帮忙替解决这个问题。
输入描述
第一行输入为
N
,表示小华排成一排的积木总数。
接下来
N
行每行一个数字,表示小华排成一排的积木上数字。
输出描述
相同数字的积木的位置最远距离;
如果所有积木数字都不相同,请返回
-
1.
补充说明
0
<=
积木上的数字
<
10
^9
1
<=
积木长度
<=
10
^5
示例
示例 1输入:512314输出: 3说明:一共有 5 个积木,第 1 个积木和第 4 个积木数字相同,其距离为 3 ;输入:212输出: - 1说明:一共有 2 个积木,没有积木数字相同,返回 - 1 ;Java代码实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] nums = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = sc.nextInt();
}
System.out.println(findMaxDistance(nums));
}
public static int findMaxDistance(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int maxDistance = -1;
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
//这段代码是计算最大距离的。
//首先,定义了一个变量maxDistance来存储最大距离,初始值为-1。
//然后,使用一个循环遍历输入的积木上的数字。在每次循环中,通过map.get(nums[i])获取当前数字在HashMap中对应的位置。如果该位置存在(即之前已经出现过这个数字),则计算当前位置与之前出现该数字的位置之间的距离,并更新maxDistance为较大的那个值。如果该位置不存在(即之前没有出现过这个数字),则将当前位置存入HashMap中。
//最后,返回maxDistance作为结果。
maxDistance = Math.max(maxDistance, i - map.get(nums[i]));
} else {
map.put(nums[i], i);
}
}
return maxDistance;
}