15. 赎金信
383. 赎金信
给你两个字符串: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
由小写英文字母组成
1 class Solution { 2 public boolean canConstruct(String ransomNote, String magazine) { 3 int[] arr = new int[26]; 4 int temp; 5 // 将magazine中所有字符存储,并记录次数。索引0-25分别代表26个小写英文字母 6 for (int i = 0;i < magazine.length();i++){ 7 temp = magazine.charAt(i) - 'a'; 8 arr[temp]++; 9 } 10 // 将ransomNote中所有数据依次用arr中存储的数据来写入,若数量不够或无此字母则判false 11 for (int i = 0;i < ransomNote.length();i++){ 12 temp = ransomNote.charAt(i) - 'a'; 13 if (arr[temp] > 0){ 14 arr[temp]--; 15 } else { 16 return false; 17 } 18 } 19 return true; 20 } 21 }
关键点:1.temp = magazine.charAt(i) - 'a';将字母减去'a'可以获得该字母的下标序号(即对应索引的字母)
2.arr[temp]++;记录字母次(个)数