LeetCode 318. 最大单词长度乘积

给你一个字符串数组 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 
解释:不存在这样的两个单词。

提示:

  • 2 <= words.length <= 1000
  • 1 <= words[i].length <= 1000
  • words[i] 仅包含小写字母
java 复制代码
class Solution {
    public int maxProduct(String[] words) {
        int[] wordArr = new int[words.length];
        for (int i = 0; i < words.length; i++) {
            for (char ch : words[i].toCharArray()) {
                wordArr[i] |= 1 << (ch - 'a');
            }
        }
        int res = 0;
        for (int i = 0; i < wordArr.length; i++) {
            for (int j = i + 1; j < wordArr.length; j++) {
                if ((wordArr[i] & wordArr[j]) == 0) {
                    res = Math.max(res, words[i].length() * words[j].length());
                }
            }
        }
        return res;
    }
}

位运算解释(来自chat-gpt):

  1. |= 是一个按位或赋值运算符。它执行当前wordArr[i]值与右侧值的按位或操作,然后将结果赋回给wordArr[i]。在这种情况下,它用于设置wordArr[i]中的特定位。

  2. 1 << (ch - 'a') 是一个位操作。它的工作方式如下:

    • ch 是一个字符。
    • ch 与字符 'a' 的ASCII值相减,得到ch与 'a' 的ASCII值之间的差值。这本质上将每个字符映射到字母表中的一个位置。例如,如果ch是 'a',则该表达式的值为0,如果ch是 'b',则值为1,依此类推。
    • 然后,将1左移前面步骤得到的值的位数。这意味着将1的二进制表示向左移动这么多位。将1左移0位不会改变它(1 << 0 = 1),将1左移1位得到2(1 << 1 = 2),将1左移2位得到4(1 << 2 = 4),依此类推。
相关推荐
自由生长20246 分钟前
科普-BOM是什么?和UTF-8什么关系?
算法
ZhengEnCi8 分钟前
J1B-为什么99%的人配置Java环境失败?大厂开发者5分钟搞定的JDK安装与环境配置完全指南
java
零雲12 分钟前
java面试:有了解过kafka架构吗,可以详细讲一讲吗
java·面试·kafka
一行•坚书17 分钟前
kafka服务端与客户端如何协作?生产者发送消息分区策略是什么?消费者组分区策略?集群与ACK机制?
java·后端·kafka
小年糕是糕手25 分钟前
【数据结构】常见的排序算法 -- 插入排序
c语言·开发语言·数据结构·学习·算法·leetcode·排序算法
serve the people33 分钟前
Prompt Composition with LangChain’s PipelinePromptTemplate
java·langchain·prompt
天天摸鱼的java工程师34 分钟前
干掉系统卡顿!Excel异步导出完整实战方案(百万数据也不慌)
java·后端
心随雨下42 分钟前
Java中将System.out内容写入Tomcat日志
java·开发语言·tomcat
墨染点香43 分钟前
LeetCode 刷题【142. 环形链表 II】
算法·leetcode·链表
海琴烟Sunshine1 小时前
leetcode 263. 丑数 python
python·算法·leetcode