來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/ransom-note
題目描述:
為了不在贖金信中暴露字跡,從雜志上搜索各個(gè)需要的字母臭埋,組成單詞來(lái)表達(dá)意思臀玄。
給你一個(gè)贖金信 (ransomNote) 字符串和一個(gè)雜志(magazine)字符串畅蹂,判斷 ransomNote 能不能由 magazines 里面的字符構(gòu)成液斜。
如果可以構(gòu)成,返回 true 少漆;否則返回 false 。
magazine 中的每個(gè)字符只能在 ransomNote 中使用一次渗磅。
示例 1:
輸入:ransomNote = "a", magazine = "b"
輸出:false
示例 2:
輸入:ransomNote = "aa", magazine = "ab"
輸出:false
示例 3:
輸入:ransomNote = "aa", magazine = "aab"
輸出:true
題目分析:
- 如果ransomNote 可以由 magazines 里面的字符構(gòu)成,則代表ransomNote的每個(gè)字符都在magazine中存在仔掸,又因?yàn)閙agazine 中的每個(gè)字符只能在 ransomNote 中使用一次医清。說(shuō)明ransomNote中每個(gè)字符的詞頻必然是小于等于magazine的。
思路:
利用計(jì)數(shù)排序负懦,記錄ransomNote中每個(gè)字符出現(xiàn)的詞頻,然后遍歷magazine柏腻,減去magazine中對(duì)應(yīng)字符的詞頻,如果最后數(shù)組還存在大于0的值残腌,說(shuō)明ransomNote中某個(gè)字符出現(xiàn)的次數(shù)大于magazine贫导。
代碼實(shí)現(xiàn):
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] a_arr = new int[26];
int a_len = ransomNote.length();
for (int i = 0; i < a_len; i++) {
a_arr[ransomNote.charAt(i) - 'a']++;
}
int b_len = magazine.length();
for (int i = 0; i < b_len; i++) {
a_arr[magazine.charAt(i) - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (a_arr[i] > 0) return false;
}
return true;
}
}