首先使用 Arrays.sort
public static void main(String[] args) {
String s="schoolmaster";
String s1="theclassroom";
char a[]=s.toCharArray();
Arrays.sort(a);
char a1[]=s1.toCharArray();
Arrays.sort(a1);
System.out.println(Arrays.equals(a, a1));
}
这个使用 hashmap
public static void main(String[] args) {
String s="murphee";
String s1="purhmee";
System.out.println(new Anagram().checkAnagram(s, s1));
}
boolean checkAnagram(String s,String s1)
{
if(s.length()!=s1.length())
return false;
Map<Character,Integer> hs= new HashMap<Character,Integer>();
char c[]=s.toCharArray();
for(char cs:c)
{
if(hs.containsKey(cs))
{
hs.put(cs,hs.get(cs)+1);
}
else
hs.put(cs,0);
}
char c1[]=s1.toCharArray();
for(char cs:c1)
{
if(hs.containsKey(cs))
{
if(hs.get(cs)!=0)
hs.put(cs,hs.get(cs)-1);
else
hs.remove(cs);
}
}
if(hs.size()==0)
return true;
else
return false;
}
hashmap的实现是调用put和get几次,isnt比Arrays慢......
请帮助我了解复杂性如何发挥作用,以及是否有其他更好的方法来查找字谜
答案 0 :(得分:1)
数组实现是O(n * log n)(如果不是最差的话),因为数组正在排序 另一方面,哈希映射实现是O(n),因为每次插入/更改为哈希映射都是O(1),并且您为每个字符执行此操作(O(n)* 2 = O(n) )。
因此,哈希映射实现(理论上)更有效。 但请注意,如果您只处理小型数组,则实际情况并非如此。复杂性计算的目标是大量投入,而不是很小。