给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
提示:
- 1 <= ransomNote.length, magazine.length <= 105
- ransomNote 和 magazine 由小写英文字母组成
思路
这题的大意就是字符串A能否组成字符串B, 这里两个思路, 一个是使用HashMap将A串字符作为Key存入, Value是出现次数. 再用B减去.
第二种方法是使用数组也是类似的方法.
代码实现
HashMap:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> map = new HashMap<>();
for(char c : magazine.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
for(char c : ransomNote.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) - 1);
if(map.get(c) < 0) {
return false;
}
}
return true;
}
}
数组:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] arr = new int[26];
for(char c : magazine.toCharArray()) {
arr[c - 'a'] += 1;
}
for(char c : ransomNote.toCharArray()) {
arr[c - 'a'] -= 1;
}
for(int i : arr) {
if(i < 0) {
return false;
}
}
return true;
}
}
标签:Ransom,ransomNote,arr,false,map,note,magazine,383,char
From: https://www.cnblogs.com/ahci316/p/17661152.html