• 383. Ransom Note【easy】


    383. Ransom Note【easy】

    Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.

    Each letter in the magazine string can only be used once in your ransom note.

    Note:
    You may assume that both strings contain only lowercase letters.

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

    解法一:

     1 class Solution {
     2 public:
     3     bool canConstruct(string ransomNote, string magazine) {
     4         map<char, int> m_rans;
     5         
     6         for (int i = 0; i < ransomNote.length(); ++i) {
     7             ++m_rans[ransomNote[i]];
     8         }
     9         
    10         for (int i = 0; i < magazine.length(); ++i) {
    11             if (m_rans.find(magazine[i]) != m_rans.end()) {
    12                 --m_rans[magazine[i]];
    13             }
    14         }
    15         
    16         for (map<char, int>::iterator it = m_rans.begin(); it != m_rans.end(); ++it) {
    17             if (it->second > 0) {
    18                 return false;
    19             }
    20         }
    21         
    22         return true;
    23     }
    24 };

    解法二:

     1 public class Solution {
     2     public boolean canConstruct(String ransomNote, String magazine) {
     3         int[] arr = new int[26];
     4         for (int i = 0; i < magazine.length(); i++) {
     5             arr[magazine.charAt(i) - 'a']++;
     6         }
     7         for (int i = 0; i < ransomNote.length(); i++) {
     8             if(--arr[ransomNote.charAt(i)-'a'] < 0) {
     9                 return false;
    10             }
    11         }
    12         return true;
    13     }
    14 }

    参考@yidongwang 的代码。

    解法三:

     1 class Solution {
     2 public:
     3     bool canConstruct(string ransomNote, string magazine) {
     4         unordered_map<char, int> map(26);
     5         for (int i = 0; i < magazine.size(); ++i)
     6             ++map[magazine[i]];
     7         for (int j = 0; j < ransomNote.size(); ++j)
     8             if (--map[ransomNote[j]] < 0)
     9                 return false;
    10         return true;
    11     }
    12 };

    参考@haruhiku 的代码

    解法四:

     1 class Solution {
     2 public:
     3     bool canConstruct(string ransomNote, string magazine) {
     4         vector<int> vec(26, 0);
     5         for (int i = 0; i < magazine.size(); ++i)
     6             ++vec[magazine[i] - 'a'];
     7         for (int j = 0; j < ransomNote.size(); ++j)
     8             if (--vec[ransomNote[j] - 'a'] < 0)
     9                 return false;
    10         return true;
    11     }
    12 };

    参考@haruhiku 的代码

  • 相关阅读:
    细说 webpack 之流程篇
    git 撤销commit
    Git远程操作详解
    git Could not read from remote repository 解决
    Mysql 关键字及保留字
    使用 Intellij Idea 导出JavaDoc
    【树莓派】盒子常见问题处理基础帮助
    【树莓派】crontab设置Linux设备定时重启
    【医疗行业】关于dcm4che DICOM Toolkit:C-Move与C-Get
    关于操作系统:eos、deepin
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7582187.html
Copyright © 2020-2023  润新知