Golang每日一练(leetDay0107) 去除重复字母、最大单词长度乘积

news2024/12/23 2:01:54

 

目录

316. 去除重复字母 Remove Duplicate Letters  🌟🌟

318. 最大单词长度乘积 Maximum-product-of-word-lengths  🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


316. 去除重复字母 Remove Duplicate Letters

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

示例 1:

输入:s = "bcabc"
输出:"abc"

示例 2:

输入:s = "cbacdcbc"
输出:"acdb"

提示:

  • 1 <= s.length <= 10^4
  • s 由小写英文字母组成

代码1:贪心算法

package main

import "fmt"

func removeDuplicateLetters(s string) string {
	stack := []byte{}
	count := [26]int{}
	visited := [26]bool{}
	for i := 0; i < len(s); i++ {
		count[s[i]-'a']++
	}
	for i := 0; i < len(s); i++ {
		count[s[i]-'a']--
		if visited[s[i]-'a'] {
			continue
		}
		for len(stack) > 0 && stack[len(stack)-1] > s[i] && count[stack[len(stack)-1]-'a'] > 0 {
			visited[stack[len(stack)-1]-'a'] = false
			stack = stack[:len(stack)-1]
		}
		stack = append(stack, s[i])
		visited[s[i]-'a'] = true
	}
	return string(stack)
}

func main() {
	s := "bcabc"
	fmt.Println(removeDuplicateLetters(s))

	s = "cbacdcbc"
	fmt.Println(removeDuplicateLetters(s))
}

代码2:暴力枚举

package main

import "fmt"

func removeDuplicateLetters(s string) string {
    lastPos := [26]int{}
    for i := 0; i < len(s); i++ {
        lastPos[s[i]-'a'] = i
    }
    visited := [26]bool{}
    res := []byte{}
    for i := 0; i < len(s); i++ {
        if visited[s[i]-'a'] {
            continue
        }
        for len(res) > 0 && res[len(res)-1] > s[i] && lastPos[res[len(res)-1]-'a'] > i {
            visited[res[len(res)-1]-'a'] = false
            res = res[:len(res)-1]
        }
        res = append(res, s[i])
        visited[s[i]-'a'] = true
    }
    return string(res)
}

func main() {
	s := "bcabc"
	fmt.Println(removeDuplicateLetters(s))

	s = "cbacdcbc"
	fmt.Println(removeDuplicateLetters(s))
}

输出:

abc

acdb


318. 最大单词长度乘积 Maximum-product-of-word-lengths

给你一个字符串数组 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] 仅包含小写字母

代码1:位运算 + 哈希表

package main

import "fmt"

func maxProduct(words []string) int {
	n := len(words)
	max := func(x, y int) int {
		if x > y {
			return x
		}
		return y
	}
	hash := make(map[int]int, n)
	for _, word := range words {
		mask := 0
		for _, ch := range word {
			mask |= 1 << (uint)(ch-'a')
		}
		hash[mask] = max(hash[mask], len(word))
	}
	res := 0
	for mask1, len1 := range hash {
		for mask2, len2 := range hash {
			if mask1&mask2 == 0 {
				res = max(res, len1*len2)
			}
		}
	}
	return res
}

func main() {
	words := []string{"abcw", "baz", "foo", "bar", "xtfn", "abcdef"}
	fmt.Println(maxProduct(words))

	words = []string{"a", "ab", "abc", "d", "cd", "bcd", "abcd"}
	fmt.Println(maxProduct(words))

	words = []string{"a", "aa", "aaa", "aaaa"}
	fmt.Println(maxProduct(words))
}

代码2:暴力枚举

package main

import "fmt"

func maxProduct(words []string) int {
    n := len(words)
    res := 0
    for i := 0; i < n; i++ {
        for j := i + 1; j < n; j++ {
            if hasNoCommonChar(words[i], words[j]) {
                res = max(res, len(words[i])*len(words[j]))
            }
        }
    }
    return res
}

func hasNoCommonChar(word1, word2 string) bool {
    for i := 0; i < len(word1); i++ {
        for j := 0; j < len(word2); j++ {
            if word1[i] == word2[j] {
                return false
            }
        }
    }
    return true
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

func main() {
	words := []string{"abcw", "baz", "foo", "bar", "xtfn", "abcdef"}
	fmt.Println(maxProduct(words))

	words = []string{"a", "ab", "abc", "d", "cd", "bcd", "abcd"}
	fmt.Println(maxProduct(words))

	words = []string{"a", "aa", "aaa", "aaaa"}
	fmt.Println(maxProduct(words))
}

输出:

16
4
0


Go1.21 新增 min、max 内置函数,示例如下:

var x, y int
m := min(x)                 // m == x
m := min(x, y)              // m 是 x 和 y 中较小的那个

m := max(x, y, 10)          // m 是 x 和 y 中较大的一个,但至少是10
c := max(1, 2.0, 10)        // c == 10.0(浮点类型)
f := max(0, float32(x))     // f 的类型是 float32

var s []string
_ = min(s...)               // 无效:不允许使用 slice 参数
t := max("", "foo", "bar")  // t == "foo" (string 类型)

升级到V1.21后,不再需要每次用到max, min就要自定义。

对于一些特殊值和清空,例如:浮点参数、负零、NaN和无穷大。min、max 函数结果适用以下规则:
    x        y    min(x, y)    max(x, y)
  -0.0    0.0       -0.0          0.0  
  -Inf      y         -Inf            y    
  +Inf      y           y         +Inf    
   NaN    y        NaN       NaN

第一行:负零比(非负)零小。
第二行:负无穷大比任何其他数字都小。
第三行:正无穷大于任何其他数字。
第四行:如果有任何一个参数是 NaN,结果就是 NaN。


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

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

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

相关文章

【Less】四则运算

Less四则运算特点 对于两个不同单位值之间的运算&#xff0c;不要求你进行运算操作的几个值必须带单位&#xff0c;只要其中有一个有单位就可以了&#xff0c;运算结果的值会优先取第一个值的单位为准。如&#xff1a; 2030px-10em编译成40px。border:10em; border:(border2px)…

数据挖掘——宁县(区、市)农村居民人均可支配收入影响因子分析(论文)

《数据挖掘与分析》课程论文 题目&#xff1a;宁县&#xff08;区、市&#xff09;农村居民人均可支配收入影响因子分析 xx学院xx班&#xff1a;xxx 2022年6月 摘要&#xff1a;农村居民人均可支配收入可能被农作物产量、牲畜存栏、农作物播种数量等诸多因素影响。为此&#…

JavaSE基础语法--封装

Java是一门面向对象的语言。面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。封装到底是什么含义呢&#xff1f;通俗来讲就是屏蔽掉类的实现细节&#xff0c;对外提供接口让你调用。举个现实生活中的例子&#xff1a; 刚好618刚过&#xff0c;我因为需求…

chatgpt赋能python:Python算和的重要性及优势

Python算和的重要性及优势 在现代科技时代&#xff0c;计算机的应用范围越来越广泛&#xff0c;Python算和作为一种高效而强大的计算工具&#xff0c;已经成为了无数科学家和工程师的必备技能。Python算和不仅仅在各类科学实验中有着重要的应用&#xff0c;也在企业开发、数据…

chatgpt赋能python:Python程序一直运行怎么停止?

Python程序一直运行怎么停止&#xff1f; 在开发软件时&#xff0c;有时候我们会遇到Python程序一直运行不停止的情况&#xff0c;这时候我们该如何解决呢&#xff1f;本文将介绍一些常见的方法帮助您停止Python程序。 常见的停止Python程序的方法 1. KeyboardInterrupt&…

【硬件5】vr电源芯片驱动

文章目录 1.读MPS5023芯片&#xff1a;0x03ff即将前6位屏蔽2.读PXE1410CDM电压和电流&#xff1a;一个数&0x7ff&#xff0c;将这个数前5位全变为0&#xff0c;其余位不变2.1 1ine11&#xff1a;先看第15和10位&#xff0c;e9b6是上面读出的值2.2 1ine16&#xff1a;PMBUS协…

chatgpt赋能python:Python空循环:提高代码效率的神器

Python空循环&#xff1a;提高代码效率的神器 Python作为一门高效、易学的编程语言&#xff0c;广泛应用于各行各业。在编写Python代码时&#xff0c;循环结构是经常使用的。但是&#xff0c;有时候我们需要使用循环结构&#xff0c;但并不需要执行任何操作。这时候&#xff0…

chatgpt赋能python:Python中的空格:一种重要的编程元素

Python中的空格&#xff1a;一种重要的编程元素 在Python编程中&#xff0c;空格是被广泛使用的重要元素之一。本文将介绍Python中空格的重要性&#xff0c;并探讨空格在编程中的不同应用。 为什么空格在Python编程中如此重要&#xff1f; Python对空格敏感&#xff0c;意味…

CVPR2023 多目标跟踪(MOT)汇总

一、《OVTrack: Open-Vocabulary Multiple Object Tracking》 作者:Siyuan Li* Tobias Fischer* Lei Ke Henghui Ding Martin Danelljan Fisher Yu Computer Vision Lab, ETH Zurich 论文链接 &#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Li_OVTrack…

[Selenium] 通过Java+Selenium查询某个博主的Top40文章质量分

系列文章目录 通过JavaSelenium查询文章质量分 通过JavaSelenium查询某个博主的Top40文章质量分 文章目录 系列文章目录前言一、环境准备二、查询某个博主的Top40文章2.1、修改pom.xml配置2.2、配置Chrome驱动2.3、引入浏览器配置2.4、设置无头模式2.5、启动浏览器实例&#x…

【瑞萨RA_FSP】WiFi——ESP8266模块通讯

文章目录 一、Wifi模块简介二、ESP8266功能介绍1. 通用输入/输出接口&#xff08;GPIO&#xff09;2. 使用UART与WIFI通讯3. ESP8266工作模式介绍 三、AT指令四、实验&#xff1a;STA模式测试1. 文件结构2. 宏定义函数3. ESP8266-STA功能函数4. 中断回调函数5. hal_entry入口函…

chatgpt赋能python:Python中的空值

Python中的空值 在Python编程中&#xff0c;空值指的是没有任何值的对象。在其他编程语言中&#xff0c;空值常常被称为null、nil、None或者undefined。Python中的空值用None关键字表示。 None 在Python语言中&#xff0c;None用于表示没有任何值。当用户要定义一个值却不想…

chatgpt赋能python:Python组合框(Combobox)介绍

Python组合框&#xff08;Combobox&#xff09;介绍 Python组合框&#xff08;Combobox&#xff09;是GUI编程中常用的一个组件&#xff0c;它可以让你在一个下拉框中选择一个或多个选项。Python组合框的特点是可以让用户自定义选项&#xff0c;也可以在选项中加入数据&#x…

红黑树-迭代器实现

目录 迭代器自增 当前结点存在右子树 当前结点没有存在右子树 迭代器自增完整代码 迭代器自减 迭代器自减代码&#xff1a; 迭代器自增 红黑树的迭代器应该怎么实现呢&#xff1f;现在我模仿大佬的实现逻辑。 我们迭代器最重要是可以允许自增与自减的实现的。 会发现我们…

chatgpt赋能python:Python程序运行速度问题

Python程序运行速度问题 Python是一种高级语言&#xff0c;其语法简洁、易于学习&#xff0c;在科学计算、数据分析、web开发等领域有着广泛的应用。然而&#xff0c;Python程序在运行速度方面却存在一定的瓶颈&#xff0c;这也是许多开发者关注的问题。本文将从多个方面探讨影…

【深度学习笔记】二分类问题与 Logistic 回归

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。刚兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; https://m…

chatgpt赋能python:Python等待一秒:介绍和用法全解析

Python等待一秒&#xff1a;介绍和用法全解析 什么是Python等待一秒&#xff1f; 在编写Python脚本时&#xff0c;我们通常要让程序暂停一段时间&#xff0c;这可以通过让程序等待一定的时间来实现。等待时间可以是任意长度的时间&#xff0c;最常见的时间单位是秒。Python中…

chatgpt赋能python:三种常见的Python程序错误及解决方案

三种常见的Python程序错误及解决方案 Python是一种高级编程语言&#xff0c;具有易读、易学、易维护等特点&#xff0c;被广泛应用于Web开发、数据分析、人工智能等领域。但是&#xff0c;即使是有10年Python编程经验的工程师也难免会犯错误。这篇文章将介绍Python程序中的三种…

Unity3D:添加设备

Unity3D&#xff1a;添加设备 推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a;NSDT简石数字孪生 添加设备 若要将新设备添加到设备模拟器&#xff0c;请创建设备定义和设备覆盖。 设备定义是 Unity 项目中扩展名的文本文件。它包含描述设备属性的 …

数据结构第六章 图 6.4 图的应用 错题整理

4.A A. 不是简单路径的话&#xff0c;有环&#xff0c;去环路径会更短 B. 适合的 弗洛伊德算法才不适合 C. 本来就是 D 2X2矩阵拓展到3X3矩阵 再扩大 若是子集 即加入新顶点后&#xff0c;最短路径都没有变&#xff0c;错 5.B 本题用弗洛伊德更合适 但这道题只需全部代入求最…