第383题---Random Note

  • 题意描述

    • 给定两个字符串,判断第一个字符串是否可以从第二个字符串构造出来,也就是说第一个字符串中的字符,都包含在第二个字符串当中
  • 思路:map思想,统计第二个字符串中的字符,对应的字符的index的值+1,相反,遍历第一个字符串的字符,对应的字符的index的值-1,如果index的值小于0,则返回false

  • 代码(注意思想的岔路,题目要求26个字符,仅包含lowercase letters)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Solution {
    public:
    bool canConstruct(string ransomNote, string magazine) {
    vector<int> flags(256, 0);
    for(int i = 0; i < magazine.size(); ++i) {
    int nums = (int)(magazine[i] - ' ');
    flags[nums] ++;
    }
    for(int i = 0; i < ransomNote.size(); ++i) {
    int nums = (int)(ransomNote[i] - ' ');
    flags[nums] --;
    if(flags[nums] < 0)
    return false;
    }
    return true;
    }
    };
  • 代码二(仅含有26的小写字母)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Solution {
    public:
    bool canConstruct(string ransomNote, string magazine) {
    vector<int> flags(26, 0);
    for(int i = 0; i < magazine.size(); ++i) {
    int nums = (int)(magazine[i] - 'a');
    flags[nums] ++;
    }
    for(int i = 0; i < ransomNote.size(); ++i) {
    int nums = (int)(ransomNote[i] - 'a');
    flags[nums] --;
    if(flags[nums] < 0)
    return false;
    }
    return true;
    }
    };
  • 代码三(优化转型)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Solution {
    public:
    bool canConstruct(string ransomNote, string magazine) {
    vector<int> flags(26, 0);
    for(int i = 0; i < magazine.size(); ++i) {
    int nums = static_cast<int>(magazine[i] - 'a');
    flags[nums] ++;
    }
    for(int i = 0; i < ransomNote.size(); ++i) {
    int nums = static_cast<int>(ransomNote[i] - 'a');
    flags[nums] --;
    if(flags[nums] < 0)
    return false;
    }
    return true;
    }
    };
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章