【发布时间】:2019-02-02 13:15:44
【问题描述】:
我必须找到一种方法来检查两个字符串是否是字谜。如果是,则该方法应返回 true,否则返回 false。由于我自己无法想出一个合适的方法来做这件事,我发现了 Rodney Shaghoulian 的另一段代码(Github:github.com/RodneyShag,HackerRank:hackerrank.com/RodneyShag)应该可以工作:
import java.io.*;
import java.util.*;
public class Solution {
static boolean isAnagram(String a, String b) {
if (a == null || b == null || a.length() != b.length()) {
return false;
}
a = a.toLowerCase();
b = b.toLowerCase();
HashMap<Character, Integer> map = new HashMap<>();
/* Fill HashMap with 1st String */
for (int i = 0; i < a.length(); i++) {
char ch = a.charAt(i);
map.merge(ch, 1, Integer::sum);
}
/* Compare 2nd String to 1st String's HashMap */
for (int i = 0; i < b.length(); i++) {
char ch = b.charAt(i);
if (map.containsKey(ch) && map.get(ch) > 0) {
map.put(ch, map.get(ch) - 1);
} else {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.next();
scan.close();
boolean ret = isAnagram(a, b);
System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
}
}
我只是将它复制并粘贴到我自己的 IDE 中,但在第 18 行出现三个编译错误:
map.merge(ch, 1, Integer::sum);
这么说
')' expected,
illegal start of expression,
error: ';' expected.
我不明白,因为我没有看到任何括号或任何遗漏。该代码显然也适用于作者。 谁能帮我看看问题?
另外,有没有什么方法可以在不使用哈希图的情况下比较两个字符串以查看它们是否是字谜?可能使用字符串到 char[] 方法和 for 循环? (这是我最初想出的方法,我对 hashmap 一点也不熟悉。)
【问题讨论】:
-
我可能使用的另一种方法是遍历单词中的每个字母,检查第二个单词是否包含该字母。如果它确实从第二个单词中删除它。如果它不返回 false。
-
当我在我的 IDE 上运行它时,它编译得很好
-
这太奇怪了,我多次复制并粘贴了该代码,但仍然出现该错误...谢谢您的想法。
-
听起来你的程序中有一个流浪的
}/{/(/)。 -
您正在使用 java 8 中引入的方法参考
Integer::sum.. 您使用的是旧版本吗?
标签: java arrays string compiler-errors hashmap