剑指OfferII005.单词长度的最大乘积

题目

给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。

假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。

示例 1:输入: words = ["abcw","baz","foo","bar","fxyz","abcdef"] 输出: 16

解释: 这两个单词为 "abcw", "fxyz"。它们不包含相同字符,且长度的乘积最大。

示例 2:输入: words = ["a","ab","abc","d","cd","bcd","abcd"] 输出: 4

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

示例 3:输入: words = ["a","aa","aaa","aaaa"] 输出: 0

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

提示:2 <= words.length <= 1000

1 <= words[i].length <= 1000

words[i] 仅包含小写字母

注意:本题与主站 318 题相同

解题思路分析

1、内置函数;时间复杂度O(n^3),空间复杂度O(1)

func maxProduct(words []string) int {
   res := 0
   for i := 0; i < len(words); i++ {
      for j := i + 1; j < len(words); j++ {
         if strings.ContainsAny(words[i], words[j]) == false &&
            res < len(words[i])*len(words[j]) {
            res = len(words[i]) * len(words[j])
         }
      }
   }
   return res
}

2、位运算;时间复杂度O(n^2),空间复杂度O(n)

剑指OfferII005.单词长度的最大乘积

func maxProduct(words []string) int {
   res := 0
   arr := make([]int, len(words))
   for i := 0; i < len(words); i++ {
      for _, char := range words[i] {
         // 位或 只要有1,那么就是1
         arr[i] = arr[i] | 1<

总结

Medium题目,题目同leetcode 318.最大单词长度乘积

页面更新:2024-04-01

标签:乘积   单词   长度   本题   复杂度   最大值   英语   示例   字符串   字母   字符   题目   两个   时间   科技   空间

1 2 3 4 5

上滑加载更多 ↓
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top