LeetCode-383-贖金信

雄獅虎豹發表於2021-10-01

贖金信

題目描述:給定一個贖金信 (ransom) 字串和一個雜誌(magazine)字串,判斷第一個字串 ransom 能不能由第二個字串 magazines 裡面的字元構成。如果可以構成,返回 true ;否則返回 false。

(題目說明:為了不暴露贖金信字跡,要從雜誌上搜尋各個需要的字母,組成單詞來表達意思。雜誌字串中的每個字元只能在贖金信字串中使用一次。)

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:遍歷字串
首先宣告一個Map為charCount來記錄ransomNote中每個字元出現的次數,key為出現的字元,value為重複字元出現的次數,然後遍歷ransomNote來初始化 ransomNote 的字元出現次數;然後遍歷magazine中的每一個字元,將Map還存在的字元減掉,最後遍歷完成後,如果charCount為空,說明字串 ransom 能由第二個字串 magazines 裡面的字元構成,返回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 的字元出現次數
        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"));
    }
}
【每日寄語】 不怕“難”字當道,就怕“懶”字沾身。

相關文章