Golang每日一练(leetDay0090) 运算优先级、有效字母异位词

news2024/11/25 14:20:29

目录

241. 为运算表达式设计优先级 Different Ways to Add Parentheses  🌟🌟

242. 有效的字母异位词 Valid Anagram  🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


241. 为运算表达式设计优先级 Different Ways to Add Parentheses

给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。

示例 1:

输入:expression = "2-1-1"
输出:[0,2]
解释:
((2-1)-1) = 0 
(2-(1-1)) = 2

示例 2:

输入:expression = "2*3-4*5"
输出:[-34,-14,-10,-10,10]
解释:
(2*(3-(4*5))) = -34 
((2*3)-(4*5)) = -14 
((2*(3-4))*5) = -10 
(2*((3-4)*5)) = -10 
(((2*3)-4)*5) = 10

提示:

  • 1 <= expression.length <= 20
  • expression 由数字和算符 '+''-' 和 '*' 组成。
  • 输入表达式中的所有整数值在范围 [0, 99] 

代码1:

package main

import (
	"fmt"
	"strconv"
)

func diffWaysToCompute(expression string) []int {
	var res []int
	for i := 0; i < len(expression); i++ {
		if expression[i] == '+' || expression[i] == '-' || expression[i] == '*' {
			leftRes := diffWaysToCompute(expression[:i])
			rightRes := diffWaysToCompute(expression[i+1:])
			for _, a := range leftRes {
				for _, b := range rightRes {
					switch expression[i] {
					case '+':
						res = append(res, a+b)
					case '-':
						res = append(res, a-b)
					case '*':
						res = append(res, a*b)
					}
				}
			}
		}
	}
	if len(res) == 0 {
		num, _ := strconv.Atoi(expression)
		res = append(res, num)
	}
	return res
}

func main() {
	expression := "2-1-1"
	fmt.Println(diffWaysToCompute(expression))
	expression = "2*3-4*5"
	fmt.Println(diffWaysToCompute(expression))
}

输出:

[2 0]
[-34 -10 -14 -10 10]

代码2:

package main

import (
	"fmt"
	"strconv"
)

func diffWaysToCompute(expression string) []int {
    memo := make(map[string][]int)
    var dfs func(string) []int
    dfs = func(exp string) []int {
        if res, ok := memo[exp]; ok {
            return res
        }
        var res []int
        for i := 0; i < len(exp); i++ {
            if exp[i] == '+' || exp[i] == '-' || exp[i] == '*' {
                leftRes := dfs(exp[:i])
                rightRes := dfs(exp[i+1:])
                for _, a := range leftRes {
                    for _, b := range rightRes {
                        switch exp[i] {
                        case '+':
                            res = append(res, a+b)
                        case '-':
                            res = append(res, a-b)
                        case '*':
                            res = append(res, a*b)
                        }
                    }
                }
            }
        }
        if len(res) == 0 {
            num, _ := strconv.Atoi(exp)
            res = append(res, num)
        }
        memo[exp] = res
        return res
    }
    return dfs(expression)
}

func main() {
	expression := "2-1-1"
	fmt.Println(diffWaysToCompute(expression))
	expression = "2*3-4*5"
	fmt.Println(diffWaysToCompute(expression))
}

输出:

[2 0]
[-34 -10 -14 -10 10]

代码3:

package main

import "fmt"

func diffWaysToCompute(expression string) []int {
	nums := make([]int, 0) // 记录数字
	ops := make([]byte, 0) // 记录运算符
	num := 0
	for i := 0; i < len(expression); i++ {
		if expression[i] == '+' || expression[i] == '-' || expression[i] == '*' {
			ops = append(ops, expression[i])
			nums = append(nums, num)
			num = 0
		} else {
			num = num*10 + int(expression[i]-'0')
		}
	}
	nums = append(nums, num)
	n := len(nums)
	dp := make([][][]int, n)
	for i := 0; i < n; i++ {
		dp[i] = make([][]int, n)
		for j := 0; j < n; j++ {
			dp[i][j] = make([]int, 0)
		}
	}
	for i := 0; i < n; i++ {
		dp[i][i] = append(dp[i][i], nums[i])
	}
	for len := 2; len <= n; len++ {
		for i := 0; i <= n-len; i++ {
			j := i + len - 1
			for k := i; k < j; k++ {
				leftRes := dp[i][k]
				rightRes := dp[k+1][j]
				for _, a := range leftRes {
					for _, b := range rightRes {
						switch ops[k] {
						case '+':
							dp[i][j] = append(dp[i][j], a+b)
						case '-':
							dp[i][j] = append(dp[i][j], a-b)
						case '*':
							dp[i][j] = append(dp[i][j], a*b)
						}
					}
				}
			}
		}
	}
	return dp[0][n-1]
}

func main() {
	expression := "2-1-1"
	fmt.Println(diffWaysToCompute(expression))
	expression = "2*3-4*5"
	fmt.Println(diffWaysToCompute(expression))
}

输出:

[2 0]
[-34 -10 -14 -10 10]


242. 有效的字母异位词 Valid Anagram

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 10^4
  • s 和 t 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

代码1:

package main

import "fmt"

func isAnagram(s string, t string) bool {
	if len(s) != len(t) {
		return false
	}
	table := make(map[rune]int, 26)
	for _, c := range s {
		table[c]++
	}
	for _, c := range t {
		table[c]--
		if table[c] < 0 {
			return false
		}
	}
	return true
}

func main() {
	s := "anagram"
	t := "nagaram"
	fmt.Println(isAnagram(s, t))
	s = "rat"
	t = "car"
	fmt.Println(isAnagram(s, t))
}

代码2:

package main

import "fmt"

func isAnagram(s string, t string) bool {
	if len(s) != len(t) {
		return false
	}
	table := [26]int{}
	for i := 0; i < len(s); i++ {
		table[s[i]-'a']++
	}
	for i := 0; i < len(t); i++ {
		table[t[i]-'a']--
		if table[t[i]-'a'] < 0 {
			return false
		}
	}
	return true
}

func main() {
	s := "anagram"
	t := "nagaram"
	fmt.Println(isAnagram(s, t))
	s = "rat"
	t = "car"
	fmt.Println(isAnagram(s, t))
}

 代码3:

package main

import "fmt"

import "sort"

type byteSlice []byte

func (b byteSlice) Len() int { return len(b) }

func (b byteSlice) Less(i, j int) bool { return b[i] < b[j] }

func (b byteSlice) Swap(i, j int) { b[i], b[j] = b[j], b[i] }

func isAnagram(s string, t string) bool {
    if len(s) != len(t) {
        return false
    }
    sArr := []byte(s)
    tArr := []byte(t)
    sort.Sort(byteSlice(sArr))
    sort.Sort(byteSlice(tArr))
    for i := 0; i < len(sArr); i++ {
        if sArr[i] != tArr[i] {
            return false
        }
    }
    return true
}

func main() {
	s := "anagram"
	t := "nagaram"
	fmt.Println(isAnagram(s, t))
	s = "rat"
	t = "car"
	fmt.Println(isAnagram(s, t))
}

输出:

true
false


🌟 每日一练刷题专栏 🌟

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

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

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

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

 主页: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/621870.html

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

相关文章

Vector源码

介绍 Vector是矢量队列&#xff0c;继承于AbstractList&#xff0c;实现了List, RandomAccess, Cloneable和Serializable接口Vector继承了AbstractList&#xff0c;实现了List接口&#xff0c;所以它是一个队列&#xff0c;支持相关的添加、删除、修改、遍历等功能Vector实现了…

chatgpt赋能python:Python的强制语句缩进解析

Python的强制语句缩进解析 什么是语句缩进 在其他编程语言中&#xff0c;我们通过使用花括号或者一些其他的符号来区分控制语句的范围。但在Python中&#xff0c;我们使用缩进来实现这个目的。这意味着任何控制结构的主体都必须按照要求正确缩进。 为什么Python强制要求使用…

【Java】JavaWEB核心要点总结:63

文章目录 1. JSP 和 Servlet 有什么区别2. JSP有哪些内置对象 分别是什么3. 详细讲解cookie session token4. 如果客户端禁止 了cookie &#xff0c;session 还能用吗5. session 的工作原理 1. JSP 和 Servlet 有什么区别 JSP&#xff08;Java Server Pages&#xff09;和Servl…

读改变未来的九大算法笔记06_图形识别

1. 人工智能研究人员在过去几十年中学到的最重要的教训之一 1.1. 看似智能的行为有可能从看似随机的系统中浮现出来 1.2. 如果我们有能力进入人脑&#xff0c;研究神经元之间连接的强度&#xff0c;其中绝大部分连接都会表现得很随机 1.3. 当作为集合体行动时&#xff0c;这…

javaScript蓝桥杯-----全球新冠疫情数据统计

目录 一、介绍二、准备三、⽬标四、代码五、完成 一、介绍 新冠疫情席卷全球&#xff0c;在此期间有很多免费的 API 和⽹站为⼈们提供了各个国家疫情数据的查询功能&#xff0c;这些免费公开的数据体现出了互联⽹作为信息媒介的优越性&#xff0c;帮助全球⼈⺠更好的了解⼀线疫…

电路模型和电路定律(3)——“电路分析”

小雅兰期末加油冲冲冲&#xff01;&#xff01;&#xff01; 复习之前的内容&#xff1a; 这样的连接方式是不可以的&#xff1a; 两个电压源&#xff0c;电压值不相同&#xff0c;是不能并联的 两个电流源&#xff0c;电流值不相同&#xff0c;是不能串联的 电流源也不能开…

浅谈Zuul、Gateway

一、Zuul Zuul是通过Servlet来实现的&#xff0c;Zuul通过自定义的ZuulServlet&#xff08;类似于Spring MVC的DispatcherServlet&#xff09;来对请求进行控制(一系列过滤器处理Http请求)。 所有的Request都要经过ZuulServlet的处理&#xff0c;三个核心的方法preRoute(),rou…

时钟频率的配置-DG32

时钟频率的配置-DG32 HXTAL&#xff1a;高速外部时钟&#xff0c;4到32MHz的外部振荡器&#xff0c;可为系统提供精确的主时钟。带有特定频率的晶体必须靠近两个HXTAL的引脚。和晶体连接的外部电阻和电容必须根据所选择的振荡器来调整&#xff1b; LXTAL&#xff1a;低速外部…

chatgpt赋能python:Python开发桌面应用全面介绍

Python开发桌面应用全面介绍 Python是一种非常万能的编程语言&#xff0c;也逐步发展成为一种适用于开发各种桌面应用程序的语言。Python开发桌面应用的优点是它可以快速开发&#xff0c;易于阅读和使用&#xff0c;同时具有很高的可扩展性和可维护性&#xff0c;因此越来越多…

chatgpt赋能python:Python开立方:简单快捷的计算方法

Python开立方&#xff1a;简单快捷的计算方法 如果你是一位程序员或者是一个正在学习编程的初学者&#xff0c;那么你一定会用到Python这个编程语言。Python作为一门多用途的编程语言&#xff0c;它有着简单易学、高效快捷、优雅简洁等优点。同时&#xff0c;在数据分析、人工…

Keras-3-实例2-多分类问题

1. 多分类问题&#xff1a; 1.1 路透社数据集加载 路透社数据集由路透社在1986年发布&#xff0c;包含46个不同的主题&#xff1a;某些主题样本较多&#xff0c;某些较少&#xff0c;但是训练集中每个主题都至少含有10个样本。 from keras.datasets import reuters(train_da…

ViewOverlay-加蒙层真的一种实现方式

一、ViewOverlay能实现什么&#xff1f; 在Android中&#xff0c;ViewOverlay是一个特殊的视图层&#xff0c;可以在一个视图的上方添加和管理附加的视图层&#xff0c;而不会干扰原始视图的布局和交互。它提供了一种方便的方式来在运行时添加、移除或修改视图层&#xff0c;而…

chatgpt赋能python:Python嵌入SEO

Python嵌入SEO Python是一种高级编程语言&#xff0c;由于其简单易学和广泛应用的特点&#xff0c;已经成为了许多工程师的首选语言。随着互联网发展的趋势&#xff0c;现代的SEO已经不再是简单的关键词填充和链接堆积&#xff0c;而是需要更复杂的优化方式&#xff0c;这时候…

Sentinel在k8s部署

一、Sentinel Dashboard在k8s部署 官方jar包下载 由于sentinel dashboard官方没有提供镜像下载&#xff0c;需从sentinel官方下载sentinel dashboard的jar包&#xff0c;这里选择1.8.0进行下载。注意与springboot版本的兼容性。 打镜像并上传自己镜像仓库 在自己项目中添加…

mac(M1)芯片安装Stable-diffusion-webui

背景&#xff1a;听同事说这个都是在GPU上跑的&#xff0c;cpu跑这个比较费劲。我本地mac跑这个&#xff0c;也是为了调试一些相关的插件和api。为了开发方便点。当然确实提吃内存的。 目录 一、Stable-diffusion-webui 项目地址和官方安装方式 二、自己的安装方式 2.1、更…

自定义注解,基于redis实现分布式锁

一、如何实现自定义注解 1.1、注解的基础知识 实现自定义注解其实很简单&#xff0c;格式基本都差不多。也就参数可能变一变。 Retention&#xff1a;取值决定了注解在什么时候生效&#xff0c;一般都是取运行时&#xff0c;也就是RetentionPolicy.RUNTIME。 Target&#xff…

Unreal5 第三人称射击游戏 射击功能实现2

上一篇我们实现了角色射击相关的动画以及切换逻辑&#xff0c;并将武器相关的模型添加到角色身上。 这一篇开始制作武器相关的功能。 制作子弹父类 首先创建一个actor类&#xff0c;命名为BP_Bullet&#xff0c;这个作为子弹的通用父类&#xff0c;在里面创建子弹通用的功能实…

测试相关知识

测试基础知识 1. 测试基本理念2. 软件测试的分类2.1 程序是否运行2.2 测试时间段划分2.3 是否涉及实现2.4 其它测试2.5 当前流程的测试概念 3. 测试设计方法4. 参考书籍 1. 测试基本理念 软件测试的定义&#xff1a;软件测试是使用人工或自动的手段来运行或测定某个软件系统的…

chatgpt赋能python:Python年龄换算:如何根据Python版本算出“年龄”?

Python年龄换算&#xff1a;如何根据Python版本算出“年龄”&#xff1f; Python是一种高级编程语言&#xff0c;享有强大、易读、易用和可扩展性等各种优点。它是许多开发者使用的首选语言&#xff0c;尤其在数据科学和机器学习领域中备受推崇。 但是&#xff0c;Python几乎…

网络安全工具合集

首先&#xff0c;恭喜你发现了宝藏。 本文章集成了全网优秀的开源攻防武器项目&#xff0c;包含&#xff1a; 信息收集工具&#xff08;自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描工具、各种插件....etc...&#xff09; 漏洞利用…