LeetCode 1160. 拼写单词

Posted 莴苣&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1160. 拼写单词相关的知识,希望对你有一定的参考价值。

1160. 拼写单词

难度简单

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

 

示例 1:

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

示例 2:

输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
输出:10
解释:
可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。

 

提示:

  1. 1 <= words.length <= 1000
  2. 1 <= words[i].length, chars.length <= 100
  3. 所有字符串中都仅包含小写英文字母

思路:利用ASCII码表来进行存储,先将提供的字母个数都存起来,然后用words里的单词分别依次存储并与chars里的字母个数依次对比,利用flag来做标记,并将符合条件的单词字母都加到一起,最后返回答案。

技术图片
int countCharacters(char ** words, int wordsSize, char * chars){
    int a[26]={0},b[26]={0};
    int n,sum=0;
    int j,i,flag=1,k;
    n=strlen(chars);
    for(int i=0;i<n;i++){
        b[chars[i]-a]++;
    }
    for(i=0;i<wordsSize;i++){
        n=strlen(words[i]);
        for(j=0;j<n;j++){
            a[words[i][j]-a]++;
            if(a[words[i][j]-a]>b[words[i][j]-a]){
                flag=0;
                break;
            }
        }
            if(flag==1){
                sum+=n;
            }
            flag=1;
            for(k=0;k<26;k++){
                a[k]=0;
        }
    }
    return sum;
}
View Code

 

以上是关于LeetCode 1160. 拼写单词的主要内容,如果未能解决你的问题,请参考以下文章

拼写单词(leetcode 1160)

1160. Find Words That Can Be Formed by Characters 拼写单词 (统计字母数量的常用方法)

LeetCode --- 字符串系列 --- 拼写单词

拼写单词[哈希表]----leetcode5048

LeetCode 28. 拼写单词 HashMap赋值给另一个HashMap

leetcode1160