博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode318. Maximum Product of Word Lengths
阅读量:7120 次
发布时间:2019-06-28

本文共 1104 字,大约阅读时间需要 3 分钟。

题目要求

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.Example 1:Given ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]Return 16The two words can be "abcw", "xtfn".Example 2:Given ["a", "ab", "abc", "d", "cd", "bcd", "abcd"]Return 4The two words can be "ab", "cd".Example 3:Given ["a", "aa", "aaa", "aaaa"]Return 0No such pair of words.

有一个字符串数组,从该字符串数组中找到两个字符串,要求满足这两个字符串之间没有相同的字母,同时它们的长度的乘积最大。

思路和代码

这道题的重点在于如何优化字符串的比较。直观的来说,我们无法避开复杂度为O(n^2)的循环因为必须进行两两比较才能识别出最大的乘积。但是我们可以优化字符串的比较。

既然只需要知道两个字符串是否有相同的字母,那么我们可以采用一种数据结构将每个单词所有的字母记录下来。这里采用的是二进制数的形式。我们知道字母的数量不会超过26个,因此我们使用32位的整数来存储。将低26位的二进制数分别对应字母a-z,从而用二进制数实现一个简单的map。

因此单词ae对应的二进制数为00000000 00000000 00000000 00010001

那么比较两个单词是否有重复的字母只需要将二者的二进制形式进行&操作即可。如果没有重复字母,则结果应该为0.

public int maxProduct(String[] words) {        int length = words.length;        int[] wordToInt = new int[length];        for(int i = 0 ; i

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

转载地址:http://mgiel.baihongyu.com/

你可能感兴趣的文章
Oracle的悲观锁和乐观锁---摘抄
查看>>
laravel使用的模板引擎 blade
查看>>
jvm之 国际酒店 一次报表 load数据死循环导致的FULLGC
查看>>
【Android开发坑系列】如何让Service尽可能存活
查看>>
javascript操作注册表
查看>>
BZOJ 1151 傲娇的人 排序
查看>>
Hierarchy Viewr 配合 adb 命令 查看窗口属性
查看>>
正则表达式
查看>>
专车降价滴滴快车使命终结?
查看>>
Jquery简介选择的
查看>>
android 滚动条
查看>>
Eclipse+Maven创webapp工程
查看>>
电商库存基础篇之一
查看>>
Android第一次打开应用程序,实现向导界面
查看>>
BC 2015在百度之星程序设计大赛 - 预赛(1)(系列转换-二分法答案贪婪)
查看>>
Labview按钮的机械动作
查看>>
Android-打反编译工具的一种方法
查看>>
DuiVision开发教程(15)-DUI文本控制基础类
查看>>
IOS-图片操作集合
查看>>
《Programming WPF》翻译 第7章 6.视频和3-D
查看>>