提示如下:给定两个字符串 s 和 t,如果 t 是 s 的字谜词,则返回 true,否则返回 false。
我尝试通过创建一个 if 语句来检查两个哈希图的大小是否相同来修复它,但这没有做任何事情。
这是我的解决方案:
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
HashMap<Character, Integer> stringS = new HashMap<>();
HashMap<Character, Integer> stringT = new HashMap<>();
for(int i = 0; i < s.length(); i++){
stringS.put(s.charAt(i), stringS.getOrDefault(s.charAt(i), 0) + 1);
}
for(int i = 0; i < t.length(); i++){
stringT.put(t.charAt(i), stringT.getOrDefault(t.charAt(i), 0) + 1);
}
for(int i = 0; i < stringS.size(); i++){
if(!stringT.containsKey(s.charAt(i)) || !stringT.get(s.charAt(i)).equals(stringS.get(s.charAt(i)))){
return false;
}
}
return true;
}
}
它通过了 41/42 个测试用例,但未通过以下测试用例: 输入 s =“疾病” t =“莳萝” 输出:真 预期:假
我认为您的代码中有一些问题。正确的代码将如下所示。我已经用你的场景模拟了这个测试代码并且它通过了。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
HashMap<Character, Integer> stringS = new HashMap<>();
HashMap<Character, Integer> stringT = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
stringS.put(s.charAt(i), stringS.getOrDefault(s.charAt(i), 0) + 1);
}
for (int i = 0; i < t.length(); i++) {
stringT.put(t.charAt(i), stringT.getOrDefault(t.charAt(i), 0) + 1);
}
// Check if the frequencies of characters match
for (char c : stringS.keySet()) {
if (!stringT.containsKey(c) || !stringT.get(c).equals(stringS.get(c))) {
return false;
}
}
return true;
}
}
问题是