[LeetCode-String] Lettre de rançon

Description du titre

Étant donné une chaîne de lettres de rançon (rançon) et une chaîne de magazine (magazine), déterminez si la première rançon de chaîne peut être composée de caractères dans les deuxièmes magasins de chaîne. S'il peut être construit, retournez true, sinon retournez false.
(Description du titre: afin de ne pas exposer l'écriture manuscrite de la lettre de rançon, vous devez rechercher dans le magazine chaque lettre requise pour former un mot pour exprimer la signification. Chaque caractère de la chaîne du magazine ne peut être utilisé qu'une seule fois dans la chaîne de lettre de rançon.)
Remarque:
Vous On peut supposer que les deux chaînes ne contiennent que des lettres minuscules.
Exemples:

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true

Lien de titre : https://leetcode-cn.com/problems/ransom-note/

Des idées

La signification de cette question est qu'il existe deux chaînes nommées rançon et magazine. Pour déterminer si les caractères en rançon apparaissent dans le magazine et si les caractères du magazine ne peuvent être utilisés qu'une seule fois, par exemple, ab apparaît dans abcd, et aab n'apparaît pas dans abcd car un dans abcd ne peut correspondre qu'une seule fois. Par conséquent, créez d'abord une table de hachage pour enregistrer le nombre d'occurrences de chaque caractère dans le magazine, traversez la rançon, si un caractère apparaît dans le magazine, si la valeur est 0, puis retournez false, sinon la valeur de hachage correspondant au caractère Moins un. Le code est le suivant

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        if(ransomNote.empty()) return true;
        if(ransomNote.length()>magazine.length()) return false;
        
        int mg[256];
        memset(mg, 0, sizeof(mg));
        for(int i=0; i<magazine.length(); i++){
            mg[magazine[i]]++;
        }
        for(int i=0; i<ransomNote.length(); i++){
            if(mg[ransomNote[i]]>0){
                mg[ransomNote[i]]--;
            } else return false;
        }
        return true;
    }
};
  • Complexité temporelle: O (m + n)
    où m et n sont la longueur des deux chaînes.
  • Complexité spatiale: O (1)

Je suppose que tu aimes

Origine www.cnblogs.com/flix/p/12688018.html
conseillé
Classement