【发布时间】:2017-01-04 16:57:15
【问题描述】:
比较 2 个字符串并返回它们是否是字谜。
我有一个有效的代码:
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
HashMap<String, Integer> map= new HashMap<>();
HashMap<String, Integer> map1= new HashMap<>();
String str1 = "abaa";
String str2 = "baaa";
String str3 = "bbbb"; //false
for(int i=0 ; i < str1.length(); i++){ //sr1 map
String value = String.valueOf(str1.charAt(i));
if (map1.containsKey(value)) {
map1.put(value, map1.get(value) + 1);
} else {
// No such key
map1.put(value, 1);
}
}
for(int i=0 ; i < str1.length(); i++){ //str2 map
String value = String.valueOf(str3.charAt(i));
if (map.containsKey(value)) {
map.put(value, map.get(value) + 1);
} else {
// No such key
map.put(value, 1);
}
}
if(map1.equals(map)){
System.out.println("true"); //anagrams
} else{
System.out.println("FalsE"); //not anagrams
}
}
}
它应该为str1, str2 和FALSE 为str1, str3 输出TRUE。
不过,我使用 hashmaps 做到了这一点,我想知道这是否有效。 我如何计算这个效率?什么是更有效的方法?
效率:好像2个O(n)调用,hashmap调用都是O(1)。解释一下?
【问题讨论】:
-
你无法改进 O(n),因为你必须读取字符串的每个字符,这就是 O(n)