贖金信
題目描述:給定一個(gè)贖金信 (ransom) 字符串和一個(gè)雜志(magazine)字符串丽涩,判斷第一個(gè)字符串 ransom 能不能由第二個(gè)字符串 magazines 里面的字符構(gòu)成谭梗。如果可以構(gòu)成,返回 true 奉瘤;否則返回 false。
(題目說明:為了不暴露贖金信字跡,要從雜志上搜索各個(gè)需要的字母狠半,組成單詞來表達(dá)意思。雜志字符串中的每個(gè)字符只能在贖金信字符串中使用一次颤难。)
示例說明請(qǐng)見LeetCode官網(wǎng)神年。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/ransom-note/
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)行嗤,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處已日。
解法一:遍歷字符串
首先聲明一個(gè)Map為charCount來記錄ransomNote中每個(gè)字符出現(xiàn)的次數(shù),key為出現(xiàn)的字符栅屏,value為重復(fù)字符出現(xiàn)的次數(shù)飘千,然后遍歷ransomNote來初始化 ransomNote 的字符出現(xiàn)次數(shù);然后遍歷magazine中的每一個(gè)字符栈雳,將Map還存在的字符減掉护奈,最后遍歷完成后,如果charCount為空甫恩,說明字符串 ransom 能由第二個(gè)字符串 magazines 里面的字符構(gòu)成逆济,返回true;否則磺箕,返回false奖慌。
import java.util.HashMap;
import java.util.Map;
public class LeetCode_383 {
public static boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> charCount = new HashMap<>();
// 初始化 ransomNote 的字符出現(xiàn)次數(shù)
for (char c : ransomNote.toCharArray()) {
if (charCount.containsKey(c)) {
charCount.put(c, charCount.get(c) + 1);
} else {
charCount.put(c, 1);
}
}
// 判斷 magazine 中是否有字符可以組成 ransomNote
for (char c : magazine.toCharArray()) {
if (charCount.containsKey(c)) {
if (charCount.get(c) > 1) {
charCount.put(c, charCount.get(c) - 1);
} else {
charCount.remove(c);
}
}
}
if (charCount.isEmpty()) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
System.out.println(canConstruct("aa", "aab"));
}
}
【每日寄語】 不怕“難”字當(dāng)?shù)溃团隆皯小弊终瓷怼?/em>