题目链接
英文链接:https://leetcode.com/problems/maximum-product-of-word-lengths/
中文链接:https://leetcode-cn.com/problems/maximum-product-of-word-lengths/
题目详述
给定一个字符串数组 words
,找到 length(word[i]) * length(word[j])
的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
示例 1:
1 | 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] |
示例 2:
1 | 输入: ["a","ab","abc","d","cd","bcd","abcd"] |
示例 3:
1 | 输入: ["a","aa","aaa","aaaa"] |
题目详解
- 问题的关键是如何判断两个字符串(只包含小写字母)是否含有公共字母。如果能解决这个问题,本题就变得很简单了。
- 我们可以用一个
int
型代表一个字符串。从低位到高位数,第 0 位为 1 表示这个字符串出现过字母a
,第 0 位为 0 表示没有出现过字母a
;依此类推,第 25 位为 1 表示这个字符串出现过字母z
,第 25 位为 0 表示没有出现过字母z
。 - 经过处理后,判断两个字符串是否含有公共字母就比较简单了:对相应的两个整数进行
&
操作,如果结果为 0,表示两个字符串不含有公共字母;否则含有公共字母。
1 | public class LeetCode_00318 { |