您的位置:首页 > 其它

[LeetCode] Ransom Note

2016-08-14 21:57 260 查看
A very typical application of hash maps. Since I am now learning Java, I code in Java. The following code uses toCharArray() and getOrDefault(), which are learnt from this post.

public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character, Integer> map = new HashMap<>();
for (Character k : magazine.toCharArray()) {
int v = map.getOrDefault(k, 0) + 1;
map.put(k, v);
}
for (Character k : ransomNote.toCharArray()) {
int v = map.getOrDefault(k, 0) - 1;
if (v < 0) return false;
map.put(k, v);
}
return true;
}
}


This code takes about 60ms.

In fact, arrays can be used to replace hash maps since the test cases of this problem only contan the 26 English letters. A array-version solution can be found here and is rewritten below.

public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] map = new int[26];
for (char k : magazine.toCharArray())
map[k - 'a']++;
for (char k : ransomNote.toCharArray()) {
int v = --map[k - 'a'];
if (v < 0) return false;
}
return true;
}
}


This version is much faster, about 13ms.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: