318. 最大单词长度乘积 golang

question

给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
示例 1:

输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]
输出: 16
解释: 这两个单词为 “abcw”, “xtfn”。
示例 2:

输入: [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]
输出: 4
解释: 这两个单词为 “ab”, “cd”。
示例 3:

输入: [“a”,“aa”,“aaa”,“aaaa”]
输出: 0
解释: 不存在这样的两个单词。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-product-of-word-lengths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

如何去判断两个字符是否有相同的字母?
开辟空间存储每个单词。用int值的低26位来表示某个单词的字母种类情况。具体来说,某个单词出现了字母a,那么相应的那个int值的最低位置为1;某个单词出现了字母z,那么其对应的那个int值右起第26位置为1。 所以,对每对组合的两个单词,我们准备了int变量a和b。分别遍历两个单词的所有字母,更新好a与b。然后当a&b为0时,说明这两个单词没有公共字母。这是因为:只有在两个单词没有公共字母的情况下,a、b不会在同一位上同时为1。

debug注释

func maxProduct(words []string) int {//nums := []string{"abc", "cd", "a"}size := len(words)masks := make([]int, size)for i := 0; i < size; i++ {for _,b := range words[i] {masks[i] |= (1 << uint32(b - 'a'))}}// masks[] 7 12 1 for _, value := range masks {fmt.Printf("%b\n", value)}//111 abc//1100 cd //1 a // abc & cd == 1 
// cd & a = 0 (right)var max int for i:=0; i < size; i++ {for j := i + 1; j < size; j++ {if masks[i] & masks[j] != 0 {continue}// cd a temp := len(words[i]) * len(words[j])if max < temp {max = temp}// 2 * 1 = 2 }}return max 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt编译错误:无法解析的外部符号 __imp__CloseServiceHandle __imp__OpenSCManager

在项目开发的过程&#xff0c;我在Qt的pro工程文件中添加了一个静态库&#xff0c;编译工程后报了这个错误&#xff0c;一开始以为是静态库有问题&#xff0c;验证之后发现静态库是正确的&#xff0c;最后才发现CloseServiceHandle和openSCManager这几个API都保存在系统库Advap…

242. 有效的字母异位词 golang

242. 有效的字母异位词 两个单词如果包含相同的字母&#xff0c;次序不同&#xff0c;则称为字母易位词(anagram) 思路 字符转换成bytebyte排序byte挨个对比 // 两个单词如果包含相同的字母&#xff0c;次序不同 func quickSort(arr []byte, left int, right int) {if left &…

leetcode验证冒泡排序效率

结论&#xff1a;快排比冒泡慢 bubbleSort leetcode_bubbleSort // 两个单词如果包含相同的字母&#xff0c;次序不同 func bubbleAsort(values []byte) {for i : 0; i < len(values)-1; i {for j : i1; j < len(values); j {if values[i]>values[j]{values[i],va…

QString转化为const char *出现乱码问题

对于Qt项目开发中&#xff0c;常常会遇到QString和const char*的转化问题&#xff0c;Qt也提供了响应的API接口&#xff0c;可以把QString转化为QByteArray&#xff0c;然后再转化为const char *,具体代码如下&#xff1a; QString string("helloWorld"); const cha…

go有没有引用类型

没有引用类型 go没有引用类型在函数内部修改变量&#xff1f; 指针类型 测试代码如下 package mainimport "fmt"func add(a int) {fmt.Println("a int")fmt.Printf("%d\n", &a)a 1 }func add2(a *int) {fmt.Println("a *int"…

Qt中的QByteArray和自定义结构体之间的相互转换

在Qt项目开发中&#xff0c;经常会碰到自定义结构体和字符数组之间的转换问题&#xff0c;不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体 custom_struct *struct_data reinterpret_cast<custom_struct *>(array_data…

20. 有效的括号 golang(2)

ASCII码来处理 第一种方法使用了栈的包&#xff0c;这种方式使用了ASCII码处理&#xff0c;但是&#xff0c;做题的时候还是需要查 //ASCII码 {123 }125 (40 )41 [91 ]93 func isValid(s string) bool {size : len(s)stack : make([]byte, size)top : 0 for i:0; i<size; i …

Qt控件大小自适应电脑分辨率问题

在最近的Qt工具开发工程中&#xff0c;发现一个问题&#xff1a;在自己电脑(分辨率是1366*768)上开发出来的工具&#xff0c;发布给同事(分辨率1920*1280)使用的过程中却出现了空间字体&#xff0c;边框等变形的问题&#xff0c;最后发现原因是因为在样式设计中&#xff0c;混合…

27. 移除元素 golang

空间复杂度O(1) 题目中不需要保持数组按照原来的顺序。 返回值是删除完key的剩余元素个数。所以我们使用前后指针&#xff0c;f指针指到key的位置&#xff0c;l指最后非key的位置。交换元素。 func removeElement(nums []int, val int) int {i, j : 0, len(nums) - 1for {for …

Qt 编译错误 LINK2001:无法解析的外部符号 public: virtual struct QMetaObject const thiscall Widget::metaObject

对于Qt来说&#xff0c;signal和slots是Qt的核心&#xff0c;而对于信号来说&#xff0c;只有继承了QObject的类&#xff0c;并且在类中添加Q_OBJECT宏&#xff0c;信号才能有效地和槽建立连接。可是在Qt开发的前期&#xff0c;可能预测不到需要在类中添加信号&#xff08;也就…

122. 买卖股票的最佳时机 II golang

Me 输入: [7,1,5,3,6,4] 输出: 7 输入: [1,2,3,4,5] 输出: 4 输入: [7,6,4,3,1] 输出: 0 得出的结论就是当有了股票只要明天跌就今天卖。只要明天涨今天就买&#xff08;只限于做题&#xff1f;&#xff1f;&#xff1f;&#xff09; func maxProfit(prices []int) int {res…

Qt中QLabel的背景图片设置问题

在Qt开发的过程中&#xff0c;经常会遇到设置Label的背景图片问题&#xff0c;通常可以有一下两种方法设置&#xff1a; 方法1&#xff1a;通过setScaleContents来设置(有时候会出现svg图片无法自适应label大小的问题) QPixmap pixmap("***.svg"); label->setFix…

860. 柠檬水找零 golang

Me 不可以让后面有零钱的人先来买。所以这个题不能排序 题目的点在于20块钱找零15。15可以是5 5 5 15 或10 5 15这两种组合 func lemonadeChange(bills []int) bool {var sum5, sum10 int//sort.Ints(bills)for i:0; i<len(bills); i {switch bills[i] {case 5:sum5cas…

Qt中槽函数触发两次的两种场景分析

在Qt开发中&#xff0c;有两种情况能够触发槽函数被触发两次&#xff0c;第一种情况是必现的&#xff0c;属于错误的写法&#xff0c;是指信号和槽关联两次&#xff1b;第二种情况是偶然出现的&#xff0c;是指对信号没有正确理解导致的。 1.信号与槽关联两次 通常这种情况下发…

55. 跳跃游戏 golang

55. 跳跃游戏 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1,…

134. 加油站 golang

Me 1.油量之和大于油费之和(不够用的汽油debts大于多出来的汽油remains) 2.车程转成一个圈。如果车无法开到i1那么起点就是i1(gas[i] < cost[i] -->i1) func canCompleteCircuit(gas []int, cost []int) int {remains, debts, start : 0, 0 ,0for i,g : range gas {remai…

从mice到missForest:常用数据插值方法优缺点

一、引言 数据插值方法在数据处理和分析中扮演着至关重要的角色。它们可以帮助我们处理缺失数据&#xff0c;使得数据分析更加准确和可靠。数据插值方法被广泛应用于金融、医疗、社会科学等领域&#xff0c;以及工程和环境监测等实际应用中。 在本文中&#xff0c;我们将探讨三…

605. 种花问题 golang 切片越界问题和逻辑操作符的思考

关于切片越界的问题&#xff0c;这个解法给了参考 测试用例 0,0,1,0,1 从这个测试用例中&#xff0c;我们可以看到一次性就写出下面的if语句是有一定难度的 第一个元素就是0&#xff0c;所以第一个条件成立后&#xff0c;进行i-1判断就越界了。但是这个0是可以改为1的&#…

376. 摆动序列 golang

376. 摆动序列 求取所有的差值保存起来。然后再判断一正一负的规律是否成立 var flag int func wiggleMaxLength(nums []int) int {if len(nums) < 1 {return 0}if len(nums) 1 {return 1}var res intresult : make([]int,len(nums))m : 0for i:0; i<len(nums)-1; i {if…

392. 判断子序列 golang 关于布尔类型返回值判断的思考

Me 1.取每一个字符串的字符进行比较。 2.相等就i&#xff0c;j&#xff0c;不相等就j 3.如果s空了&#xff0c;那么就是true。如果t字符串空了那么。。。有很多种情况。所以这个解法不好。 但是如果把返回条件设置成下面这个答案就很好 解法 这个的巧妙之处在于返回值判断是否…