【发布时间】:2020-11-23 21:10:22
【问题描述】:
我有 2 个字符串可以转换为 HashMaps,第一个是用户提供给应用程序的输入。第二个是一个包含很多单词的数组。
我需要比较两个 HashMap 以检查输入是否可以重新组织以匹配 Array 的单词之一。无需使用用户输入到系统的每一个字符,第一个 HashMap 中可能有一些剩余的字符,但我需要确保它们可以匹配 Array 中的一个单词(第二个 HashMap)。
这是我创建第一个 HashMap 的方法:
String normalizedInputWord = normalizeString(inputWord);
Map<Character, Integer> countDuplicateMapInput = new HashMap<>();
char[] charInputArray = normalizedInputWord.toCharArray();
for (char c: charInputArray) {
if (countDuplicateMapInput.containsKey(c)) {
countDuplicateMapInput.put(c, countDuplicateMapInput.get(c) + 1);
} else {
countDuplicateMapInput.put(c, 1);
}
}
这是第二个:
Map<Character, Integer> countDuplicateMapArray = new HashMap<>();
for (int i = 0; i < 1; i++) {
// Calls a function to normalize each String of the wordArray Array
String normalizedWordArray = normalizeString(wordArray[i]);
char[] charWordArray = normalizedWordArray.toCharArray();
for (char c : charWordArray) {
if (countDuplicateMapArray.containsKey(c)) {
countDuplicateMapArray.put(c, countDuplicateMapArray.get(c) + 1);
} else {
countDuplicateMapArray.put(c, 1);
}
}
}
我如何比较这两种结构并获得对以下示例的“真实”响应?
示例: 输入是“不可阻挡的”,countDuplicateMapInput 将具有:
{
key: "p", value: 2;
key: "a", value: 1;
key: "b", value: 1;
key: "s", value: 1;
key: "t", value: 1;
key: "u", value: 1;
key: "e", value: 1;
key: "l", value: 1;
key: "n", value: 1;
key: "o", value: 1;
}
我的 Array 中有一个单词“stop”,它将以这种方式填充 countDuplicateMapArray:
{
key: "p", value: 1;
key: "t", value: 1;
key: "s", value: 1;
key: "o", value: 1;
}
【问题讨论】:
-
70% 的问题是毫无意义的,因为您如何 构建这两个地图根本不重要。现在给出问题末尾的 2 个示例 HashMap,您又要问什么?如果其中一个是另一个的超集,我相信?请编辑问题,删除不相关的内容,否则请澄清您需要确定的内容。
-
我只是尝试将人们可能需要考虑的所有信息放在最佳解决方案上。我需要一个解决方案来实现我在第一个 HashMap 中拥有的任何值,它们需要包含第二个 HashMap 的值。如果第二个 HashMap 有一个键“a”,则值为 3;第一个 HashMap 至少需要一个键“a”,值 3(或更多)。
-
所以我是对的?您只需要知道第一张地图是否是第二张地图的超集。
-
是的,很抱歉,如果我不明白你所说的超集是什么意思,我对编程有点陌生,我不懂一些表达方式。
-
不,严格来说它不是超集。这是因为匹配键的值需要大于或等于。对于严格的超集,值必须相等。