【发布时间】:2020-11-24 01:02:02
【问题描述】:
这是我的 java 解决方案,用于确定 t 是否是 s 的字谜(返回真或假)。当涉及到非常大的字符串时它会失败(例如,输出:false,预期:true)。
我的代码有什么问题?
import java.util.HashMap;
import java.util.Map;
public class solution {
public static void main(String[] args){
String s = "anfefeg"; // true
String t = "fegafen";
System.out.println(isAnagram(s,t));
}
public static boolean isAnagram(String s, String t) {
defaultHashMap<Character, Integer> countS = new defaultHashMap<>(0);
defaultHashMap<Character, Integer> countT = new defaultHashMap<>(0);
if (s.length() != t.length()){
return false;
}
// count frequencies of characters
for (int i=0; i < s.length(); i++){
countS.put(s.charAt(i), countS.get(s.charAt(i)) + 1);
countT.put(t.charAt(i), countT.get(t.charAt(i)) + 1);
}
// System.out.println(countS.entrySet());
// System.out.println(countT.entrySet());
// compare to map
for (Map.Entry<Character, Integer> entry : countT.entrySet()){
if (entry.getValue() != countS.get(entry.getKey())){
return false;
}
}
return true;
}
}
/*
define a defaultHashMap class extending hashmap
*/
class defaultHashMap <K,V> extends HashMap<K,V> {
protected V defaultValue;
public defaultHashMap(V defaultValue) {
this.defaultValue = defaultValue;
}
@Override
public V get(Object k) {
return containsKey(k) ? super.get(k) : defaultValue;
}
}
【问题讨论】:
-
This example works. 请提供一个实际演示问题的示例。
-
@shmosel,两个长度为 50018 的字符串导致代码失败。它们太大了,无法在此处发布。如果你不介意,你可以在 leetcode 上运行它。leetcode.com/problems/valid-anagram/description
-
既然可以调用
getOrDefault(),为什么还要自定义defaultHashMap? -
@shmosel。谢谢你让我知道。我以前不知道。我可以试试!
标签: java