脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go Java算法最大单词长度乘积示例详解

Go Java算法最大单词长度乘积示例详解

2022-11-11 11:59黄丫丫 Golang

这篇文章主要为大家介绍了Go Java算法最大单词长度乘积示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

最大单词长度乘积

给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。

*示例 1:

输入:words = ["abcw","baz","foo","bar","xtfn","abcdef"]

输出:16

解释:这两个单词为 "abcw", "xtfn"。

  • 示例 2:

输入:words = ["a","ab","abc","d","cd","bcd","abcd"]

输出:4

解释:这两个单词为 "ab", "cd"。

  • 示例 3:

输入:words = ["a","aa","aaa","aaaa"]

输出:0

解释:不存在这样的两个单词。

方法一:位运算(java)

为了得到最大单词长度乘积,朴素的做法是,遍历字符串数组 words 中的每一对单词,判断这一对单词是否有公共字母,如果没有公共字母,则用这一对单词的长度乘积更新最大单词长度乘积。

题目约定了每个单词仅包含小写字母,所以,我们可以将单词中的每个字母都映射到一个 int 类型的不同位上,这样,就做到了每个单词都对应一个 int 类型的数值,这样的话,我们对比两个单词是否包含相同的字母,只需要把它们对应的 int 数值做 & 运算,看是不是等于 0 即可,如果等于 0 ,说明没有相同的位是 1,也就不存在相同的字母。

这样,我们在比较两个单词是否没有公共字母的时候只要直接按位与一下即可,没有公共字母应该得到的值是0,其他情况得到的值都不为零。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
    public int maxProduct(String[] words) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int length = words.length;
        for (int i = 0; i < length; i++) {
            int mask = 0;
            String word = words[i];
            int wordLength = word.length();
            for (int j = 0; j < wordLength; j++) {
                mask |= 1 << (word.charAt(j) - 'a');
            }
            if (wordLength > map.getOrDefault(mask, 0)) {
                map.put(mask, wordLength);
            }
        }
        int maxProd = 0;
        Set<Integer> maskSet = map.keySet();
        for (int mask1 : maskSet) {
            int wordLength1 = map.get(mask1);
            for (int mask2 : maskSet) {
                if ((mask1 & mask2) == 0) {
                    int wordLength2 = map.get(mask2);
                    maxProd = Math.max(maxProd, wordLength1 * wordLength2);
                }
            }
        }
        return maxProd;
    }
}

l:数组中所有单词的长度之和

n:数组长度

时间复杂度:o(l+n^2)

空间复杂度:o(n)

方法一:位运算(go)

具体的方法思路已经在上文中表述,详情请看上文内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func maxProduct(words []string) int {
    hash := func(word string) int {
        res := 0
        for _, r := range word{
            res |= 1 << (r - 'a')
        }
        return res
    }
    m, ans := map[int]int{}, 0
    for _, word := range words {
        h := hash(word)
        if m[h] < len(word) {
            for other, v := range m {
                if((other & h) == 0){
                    if tmp := v * len(word); tmp > ans {
                        ans = tmp
                    }
                }
            }
            m[h] = len(word)
        }
    }
    return ans
}

l:数组中所有单词的长度之和

n:数组长度

时间复杂度:o(l+n^2)

空间复杂度:o(n)

以上就是Go Java算法最大单词长度乘积示例详解的详细内容,更多关于Go Java算法单词长度乘积的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7134220167310999566

延伸 · 阅读

精彩推荐
  • Golanggolang 之import和package的使用

    golang 之import和package的使用

    这篇文章主要介绍了golang 之import和package的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    big_cat2692020-05-23
  • Golanggolang 生成对应的数据表struct定义操作

    golang 生成对应的数据表struct定义操作

    这篇文章主要介绍了golang 生成对应的数据表struct定义操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    westhod11492021-06-06
  • Golang阿里云go开发环境搭建过程

    阿里云go开发环境搭建过程

    这篇文章主要介绍了阿里云go开发环境搭建过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下 ...

    DilonWu6232020-05-14
  • GolangGo并发编程之sync.Once使用实例详解

    Go并发编程之sync.Once使用实例详解

    sync.Once使用起来很简单, 下面是一个简单的使用案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    深度思维者11522021-11-30
  • Golang记一次 Golang 踩坑 RabbitMQ

    记一次 Golang 踩坑 RabbitMQ

    最近在项目中遇到了一个使用 RabbitMQ 时的问题,这个问题我觉得还是有一定普适性的,和大家分享一下,避免大家后续在同一个问题上犯错。...

    跨界架构师5352022-01-07
  • GolangGo语言中的函数式编程实践

    Go语言中的函数式编程实践

    这篇文章主要介绍了Go语言中的函数式编程实践,主要讲解Go语言中的函数式编程概念和使用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一...

    Oo若离oO4992020-05-15
  • Golanggo Antlr重构脚本解释器实现示例

    go Antlr重构脚本解释器实现示例

    这篇文章主要为大家介绍了go Antlr重构脚本解释器实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    crossoverJie11012022-08-08
  • GolangGo语言基础go接口用法示例详解

    Go语言基础go接口用法示例详解

    这篇文章主要为大家介绍了Go语言基础关于go接口的用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,在日升职加薪...

    枫少文11442021-12-06