zoukankan      html  css  js  c++  java
  • 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 的代码

  • 相关阅读:
    假期阅读笔记三
    软件需求最佳实践阅读笔记03
    学习进度条第八周
    软件需求最佳实践阅读笔记02
    学习进度条第七周
    软件需求与分析课堂讨论一
    学习进度第五周
    软件需求最佳实践阅读笔记01
    学习进度第四周
    学习进度条第三周
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7582187.html
Copyright © 2011-2022 走看看