go语言题解LeetCode1160拼写单词示例详解

 更新时间:2022年12月30日 09:07:02   作者:刘09k11  
这篇文章主要为大家介绍了go语言题解LeetCode1160拼写单词示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目描述

1160. 拼写单词 - 力扣(LeetCode)

给你一份『词汇表』(字符串数组) 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 <= words.length <= 1000

1 <= words[i].length, chars.length <= 100

所有字符串中都仅包含小写英文字母

思路分析

先统计chars中各字母(字符)的个数

然后分别统计words字符串数组中的每个字符串的各个字母(字符)的个数

然后在26个对应位置作比较

若当前word字符串的对应位置字符数小于等于chars中对应位置字符数

则记录当前word字符串的长度

将其做为总长度的一部分

依次比较余下的word字符串,重复前面操作,最终得到总长度(答案)

AC 代码

class Solution {
    public int countCharacters(String[] words, String chars) {
        int n=chars.length();
        int[] arr=new int[26];
        for(int i=0;i<n;i++){
            arr[chars.charAt(i)-'a']++;
        }
        int res=0;
        for(String word:words){
            int[] arr1=new int[26];
            for(int j=0;j<word.length();j++){
                arr1[word.charAt(j)-'a']++;
            }
            for(int i=0;i<26;i++){
                if(arr1[i]<=arr[i]) {
                    if(i==25) res=res+word.length();
                }else break;
            }
        }
        return res;
    }
}

参考

 别人用int[26] 解题思路

友情提示:遇到有提示字符串仅包含小写(或者大写)英文字母的题,

都可以试着考虑能不能构造长度为26的每个元素分别代表一个字母的数组,来简化计算

对于这道题,用数组c来保存字母表里每个字母出现的次数
如法炮制,再对词汇表中的每个词汇都做一数组w,比较数组w与数组c的对应位置

如果w中的都不大于c,就说明该词可以被拼写出,长度计入结果
如果w其中有一个超过了c,则说明不可以被拼写,直接跳至下一个(这里用到了带label的continue语法)

代码

class Solution {
    public int countCharacters(String[] words, String chars) {
        int[] c = new int[26];
        for(char cc : chars.toCharArray()) {
            c[(int)(cc - 'a')] += 1;
        }
        int res = 0;
        a: for(String word : words) {
            int[] w = new int[26];
            for(char ww : word.toCharArray()) {
                w[(int)(ww - 'a')] += 1;
            }
            for(int i=0; i<26; i++) {
                if(w[i] > c[i]) {
                    continue a;
                }
            }
            res += word.length();
        }
        return res;
    }
}

c++几乎双百的哈希解法

解题思路

1 构建chars的字符到数量映射表

2. 对于words里的每个单词也构建类似一个表,构建后去遍历比较是否小于等于chars里的数量,否则失败

代码

class Solution {
public:
    int countCharacters(vector<string>& words, string chars) {
        // 记录累计的长度之和
        int res = 0;
        // 构建chars的映射表
        int cnt[26];
        memset(cnt, 0, sizeof(int)*26);
        for (char c : chars)
        {
            ++cnt[c-'a'];
        }
​​​​​​​        // 遍历words去构建每个映射表,然后比较即可
        int curr[26];
        for (string word : words)
        {
            memset(curr, 0, sizeof(int)*26);
            for (char c : word)
            {
                ++curr[c-'a'];
            }
            bool IsOK= true;
            for (int i = 0; i < 26; ++i)
            {
                if (curr[i] > cnt[i])
                {
                    IsOK = false;
                    break;
                }
            }
            if (IsOK)
            {
                res += word.size();
            }
        }
        return res;
    }
};

以上就是go语言题解LeetCode1160拼写单词示例详解的详细内容,更多关于go题解拼写单词的资料请关注脚本之家其它相关文章!

相关文章

  • golang顺时针打印矩阵的方法示例

    golang顺时针打印矩阵的方法示例

    这篇文章主要介绍了golang顺时针打印矩阵的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 详解以go思想去处理js异常抛弃trycatch

    详解以go思想去处理js异常抛弃trycatch

    这篇文章主要为大家介绍了详解以go思想去处理js异常抛弃trycatch,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go应用中优雅处理Error的技巧总结

    Go应用中优雅处理Error的技巧总结

    在程序员中,尤其是go新手,经常听到的一个讨论话题是:如何处理错误,这篇文章主要给大家介绍了关于Go应用中优雅处理Error的一些相关技巧,需要的朋友可以参考下
    2021-09-09
  • Golang使用Gin框架实现HTTP响应格式统一处理

    Golang使用Gin框架实现HTTP响应格式统一处理

    在gin框架中,我们可以定义一个中间件来处理统一的HTTP响应格式,本文主要为大家介绍了具体是怎么定义实现这样的中间件的,感兴趣的小伙伴可以了解一下
    2023-07-07
  • 使用go语言解析xml的实现方法(必看篇)

    使用go语言解析xml的实现方法(必看篇)

    下面小编就为大家带来一篇使用go语言解析xml的实现方法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Golang token的生成和解析详解

    Golang token的生成和解析详解

    这篇文章主要给大家介绍了Golang token的生成和解析,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • 一篇文章带你搞懂Go语言标准库Time

    一篇文章带你搞懂Go语言标准库Time

    在我们开发的过程中,每个项目都需要时间这一类的函数,此时对time这个包的研究深度就显得尤为重要,这篇文章主要给大家介绍了关于如何通过一篇文章带你搞懂Go语言标准库Time的相关资料,需要的朋友可以参考下
    2022-10-10
  • 浅析Go语言中的栈和先进先出原则

    浅析Go语言中的栈和先进先出原则

    这篇文章主要来和大家探讨一样如何在Go语言中实现和使用堆栈,以及堆栈如何遵循先进先出 (FIFO) 原则,文中的示例代码简洁易懂,需要的可以参考一下
    2023-07-07
  • Go语言中排序的3种实现方法

    Go语言中排序的3种实现方法

    在写代码过程中,排序是经常会遇到的需求,这篇文章主要为大家介绍三种常用的方法,文中的示例代码简洁易懂,需要的小伙伴可以参考下
    2023-08-08
  • Golang中String,rune和byte的相互转换

    Golang中String,rune和byte的相互转换

    Go语言中,string就是只读的采用utf8编码的字节切片,rune是int32的别名,代表字符的Unicode编码,这篇文章主要介绍了Golang中String,rune和byte的相互转换,感兴趣的小伙伴可以了解一下
    2023-10-10

最新评论