我的解法:(解法有错误)
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int size = magazine.length();
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
String line = magazine;
int count = 1;
for (int i = 0; i < line.length(); i++) {
Character key = line.charAt(i);
if (!tm.containsKey(key)) {
tm.put(key, count);
} else {
tm.put(key, tm.get(key) + 1);
}
}
for(int j = 0;j < ransomNote.length(); j++) {
if(!tm.containsKey(ransomNote.charAt(j))){
return false;
}else{
tm.put(ransomNote.charAt(j),tm.get(ransomNote.charAt(j))-1);
}
}
return true;
}
}
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int size = magazine.length();
TreeMap<Character, Integer> map = new TreeMap<Character, Integer>();
int count = 1;
for (int i = 0; i < magazine.length(); i++) {
Character key = magazine.charAt(i);
if (!map.containsKey(key)) {
map.put(key, count);
} else {
map.put(key, map.get(key) + 1);
}
}
for(int j = 0;j < ransomNote.length(); j++) {
if(!map.containsKey(ransomNote.charAt(j))){
return false;
}else if(map.get(ransomNote.charAt(j))==1){
map.remove(ransomNote.charAt(j));
}
else{
map.put(ransomNote.charAt(j),map.get(ransomNote.charAt(j))-1);
}
}
return true;
}
}
卡尔的:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
// shortcut
if (ransomNote.length() > magazine.length()) {
return false;
}
// 定义一个哈希映射数组
int[] record = new int[26];
// 遍历
for(char c : magazine.toCharArray()){
record[c - 'a'] += 1;
}
for(char c : ransomNote.toCharArray()){
record[c - 'a'] -= 1;
}
// 如果数组中存在负数,说明ransomNote字符串总存在magazine中没有的字符
for(int i : record){
if(i < 0){
return false;
}
}
return true;
}
}
他的解法又是用了哈希映射数组。