题目
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote
和magazine
由小写英文字母组成
分析
magazine
中的每个字符只能在 ransomNote
中使用一次:
-
说明magazine中的字符串长度要大于等于ransomNote中字符串的长度
-
并且magazine中字符的种类和数量都必须大于等于ransomNote。
-
由于2个字符中都只有两个小写字母,所以只用大小为26的int数组来记录magazine中,字符串的种类和数量。
int [] cnt = new int[26];
编码
根据前面的分析进行编码
class Solution {
int [] cnt = new int[26];
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()) {
return false;
}
char [] mChars = magazine.toCharArray();
char [] rChars = ransomNote.toCharArray();
for (char mChar : mChars) {
cnt[mChar-'a']++;
}
for (char rChar : rChars) {
//每读取到一个 对应的count减1
if(--cnt[rChar-'a']<0) return false;
}
return true;
}
}
结果
qq交流群: