美文网首页
拼写单词

拼写单词

作者: WAI_f | 来源:发表于2020-06-03 06:03 被阅读0次

    题目:

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
    假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
    注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。
    返回词汇表 words 中你掌握的所有单词的 长度之和。

    示例:

    输入:words = ["cat","bt","hat","tree"], chars = "atach"
    输出:6
    解释:
    可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。

    解题方法:

    题目看起来还挺复杂的,仔细想一想就有一些思路了:

    1. 统计字母表中每个字母出现的次数;
    2. 统计词汇表中每个字符串字母出现的次数;如果这个字符串中某个字符数量大于字母表中相同字母的数量,那么说明没有掌握;反之掌握,并累加字符串的长度。

    代码和结果:

    class Solution {
    public:
        int countCharacters(vector<string>& words, string chars) {
                int cnt[256]={0};
                for(int i=0;i<chars.size();i++)
                {
                    cnt[chars[i]]++;
                }
    
                int cnt1=0;
                for(int i=0;i<words.size();i++)
                {
                    int tmp[256]={0};
                    bool flag=true;
                    for(int j=0;j<words[i].size();j++)
                    {
                        tmp[words[i][j]]++;
                    }
                    for(int j=0;j<words[i].size();j++)
                    {
                        if(tmp[words[i][j]]>cnt[words[i][j]])
                        {
                            flag=false;
                            break;
                        }  
                    }
                    if(flag)
                        cnt1+=words[i].size();
                }
                return cnt1;
        }
    };
    
    运行结果:

    原题链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters/

    相关文章

      网友评论

          本文标题:拼写单词

          本文链接:https://www.haomeiwen.com/subject/runmzhtx.html