女与男做那个的视频网站,网络推广软文,杭州最新消息今天,南京旅游网站建设公司今日学习的文章链接和视频链接
leetcode题目地址#xff1a;383. 赎金信 代码随想录题解地址#xff1a;代码随想录
题目简介
给你两个字符串#xff1a;ransomNote 和 magazine #xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以#xff0c;返… 今日学习的文章链接和视频链接
leetcode题目地址383. 赎金信 代码随想录题解地址代码随想录
题目简介
给你两个字符串ransomNote 和 magazine 判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以返回 true 否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
看到题目的第一想法(可以贴代码
1. 利用Map来存储magazine里的元素及其出现的次数再用ransomNote里的元素去“消耗它”若最后次数为 -1 或根本不存在该元素则return false。
public boolean canConstruct(String ransomNote, String magazine) {MapCharacter, Integer m new HashMap();char[] c1 magazine.toCharArray();char[] c2 ransomNote.toCharArray();for (char i : c1){if (m.containsKey(i)){int temp m.get(i);m.replace(i, temp);}else {m.put(i, 1);}}for (char i : c2){if (m.containsKey(i)){int temp m.get(i);if (temp 0) return false;m.replace(i, --temp);}else {return false;}}return true;
}
实现过程中遇到哪些困难
无
看完代码随想录之后的想法
【解题思路】以空间换取时间用一个长度为26的数组来记录magazine里字母出现的次数。
然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。
依然是数组在哈希法中的应用。
【想法】
1. 一些同学可能想用数组干啥都用map完事了其实在本题的情况下使用map的空间消耗要比数组大一些的因为map要维护红黑树或者哈希表而且还要做哈希函数是费时的数据量大的话就能体现出来差别了。 所以数组更加简单直接有效
看完视频自己写的ACC
public boolean canConstruct(String ransomNote, String magazine) {int[] alph new int[26];char[] m magazine.toCharArray();char[] r ransomNote.toCharArray();for (char i : m){alph[i-97];}for (char i : r){alph[i-97]--;if (alph[i-97] 0) return false;}return true;
}
学习时长
1250 ~ 1305 解题成功
13:05 ~ 13:10 看视频题解、写博客 今日收获
1. String的遍历
① for循环直接遍历强制转换成char类型
String str asdfghjkl; for(int i0;istr.length();i){ char ch str.charAt(i); }
② 转换成char[]遍历 GOOD
char[] cs.toCharArray(); for(char cc:c){ ...//cc直接用了 }
③ 利用substring()函数
for(int i0;istr.length();i){ String subStr str.substring(i, i1) }