不知道今天的简单题够判多少年:https://leetcode-cn.com/problems/ransom-note/
解题用到的大部分方法来自上一题的笔记,这里就不重复写了:https://www.jianshu.com/p/0396d6112b06
官方解题思路是,由于全部都是小写字母(emmm我审题不认真,没有看到),因此只要new一个长度为26的数组,来存每个字母的出现次数就好了,2次for循环。
我的思路是,把base字符串转成char[]后存入HashMap中,相同字符的value+1,再遍历另一个字符串转的char[],如果找不到直接返回false,能找到value就-1,循环全部走完还没有返回false,就返回true。
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map tmp = new HashMap();
for (int i = 0 ; i < magazine.length();i++) {
char ch = magazine.charAt(i);
tmp.put(ch, tmp.getOrDefault(ch, 0) +1);
}
for (int j = 0; j < ransomNote.length(); j++) {
char ch1 = ransomNote.charAt(j);
if (tmp.getOrDefault(ch1, 0) == 0) {
return false;
}
tmp.put(ch1, tmp.get(ch1)-1);
}
return true;
}
}
网友评论