/**
* 383. 赎金信
* 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,
* 判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,
* 返回 true ;否则返回 false。
* (题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)
* 示例 1:
* 输入:ransomNote = "a", magazine = "b"
* 输出:false
* 示例 2:
*
* 输入:ransomNote = "aa", magazine = "ab"
* 输出:false
* 示例 3:
*
* 输入:ransomNote = "aa", magazine = "aab"
* 输出:true
*/
public static void main(String[] args) {
String ransomNote = "aa";
String magazine = "aab";
System.out.println(canConstruct(ransomNote, magazine));
}
/**
* 遍历magazine ,magazine包含的字符和字符数量放入map中,
* 遍历ransomNote, 如果magazine 不包含 返回false 包含,map -1
* @param ransomNote
* @param magazine
* @return
*/
public static boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> magToNum = new HashMap<>();
for (int i = 0; i < magazine.length(); i++) {
if(magToNum.containsKey(magazine.charAt(i))){
magToNum.put(magazine.charAt(i), magToNum.get(magazine.charAt(i))+1);
}else {
magToNum.put(magazine.charAt(i), 1);
}
}
for (int i = 0; i < ransomNote.length(); i++) {
if(!magToNum.containsKey(ransomNote.charAt(i))){
return false;
}else {
Integer integer = magToNum.get(ransomNote.charAt(i));
if(integer == 0){
return false;
}else {
magToNum.put(ransomNote.charAt(i), integer-1);
}
}
}
return true;
}
字符串----383. 赎金信
最新推荐文章于 2022-05-22 15:00:36 发布