当前位置: 首页 > news >正文

leetcode分类刷题:栈(Stack)(一、字符串相邻元素删除类型)

1、在leetcode分类刷题:基于数组的双指针(一、基于元素移除的O(1)类型)题目中,采用双指针之快慢指针的算法来解决。
2、字符串相邻元素的删除问题,用栈来进行管理,会非常有效;这种题型排在后面的字母会先删除栈先进后出 的思想一致,同时也要关注相邻元素的细节,是个隐含的连续子序列,否则即使思想上与栈一致,位置上不相邻,栈是没法处理的
3、如果考察最长的相邻重复子串的长度问题,按照索引而非元素入栈的方式来写,比如题目:“32. 最长有效括号”;这类题目判断入栈的情况不能太多了,否则代码太复杂了
4、括号匹配、有效的字符串类问题也属于字符串相邻元素删除的一种,是一种隐含式的相邻元素删除。该类题目处理方式与本章总结的题型基本一致,但也有一点细节区别:入栈的情况里没有栈为空这种,只需要对元素进行不断遍历,然后判断入栈或出栈或return等;这种题目也有更简单直观的思路:遍历元素不加判断地全部入栈,不断对后入栈的栈顶连续元素进行匹配性判断,进行出栈或者直接赋值为空的操作

844. 比较含退格的字符串

是一道基本的字符串相邻元素删除题目,完美符合:排在后面的字母会先删除 与 栈先进后出 的思想一致

from typing import List'''
844. 比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。
题眼:退格字符只会删除位于它之前的字符
思路:从后向前比较
'''class Solution:# 推荐掌握——O(N)空间复杂度的栈管理字符串元素删除问题def backspaceCompare(self, s: str, t: str) -> bool:# 第一步,得到删除后的ssStack = []for ch in s:if ch != '#':sStack.append(ch)elif len(sStack) > 0:sStack.pop()sNew = ''.join(sStack)# 第二步,得到删除后的ttStack = []for ch in t:if ch != '#':tStack.append(ch)elif len(tStack) > 0:tStack.pop()tNew = ''.join(tStack)# 第三步,比较返回后的两个新字符串return sNew == tNew# 不推荐掌握——O(1)空间复杂度的双指针解法:需要额外再使用标志  标记当前待删除的字符的数量def backspaceCompare2(self, s: str, t: str) -> bool:pointer1, pointer2 = len(s) - 1, len(t) - 1  # 标记字符串末尾的位置delete1, delete2 = 0, 0  # 当前待删除的字符的数量:表示从后向前遇到的#数量while pointer1 >= 0 or pointer2 >= 0:# 寻找s中用于比较的当前有效字符while pointer1 >= 0:if s[pointer1] == '#':  # 遇到#delete1 += 1pointer1 -= 1elif delete1 > 0:  # 非#时,判断该字符是否要被删除delete1 -= 1pointer1 -= 1else:break# 寻找t中用于比较的当前有效字符while pointer2 >= 0:if t[pointer2] == '#':  # 遇到#delete2 += 1pointer2 -= 1elif delete2 > 0:  # 非#时,判断该字符是否要被删除delete2 -= 1pointer2 -= 1else:break# 比较当前有效字符if pointer1 >= 0 and pointer2 >= 0:if s[pointer1] != t[pointer2]:return Falseelse:pointer1 -= 1pointer2 -= 1elif pointer1 < 0 and pointer2 < 0:return Trueelse:return Falsereturn Trueif __name__ == "__main__":obj = Solution()while True:try:in_line = input().strip().split('=')s = in_line[1].split(',')[0].strip()[1: -1]t = in_line[2].strip()[1: -1]print(obj.backspaceCompare(s, t))except EOFError:break

1047. 删除字符串中的所有相邻重复项

1、与“844. 比较含退格的字符串”的处理方式基本一致
2、该类型题目还可以用等价地按照索引而非元素入栈的方式来写,这是在考察最长的相邻重复子串的长度问题的解题模板,比如接下来的一道题目:“32. 最长有效括号”

'''
1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例 1:
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",
其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
题眼:排在后面的字母会先删除 与 栈先进后出 的思想一致
思路:
'''class Solution:def removeDuplicates(self, s: str) -> str:stk = []for ch in s:if len(stk) == 0 or stk[-1] != ch:  # 入栈情况stk.append(ch)else:  # 出栈情况stk.pop()return ''.join(stk)# # 按照索引入栈的方式写# stk = []# for i in range(len(s)):#     if len(stk) == 0 or s[stk[-1]] != s[i]:  # 入栈情况#         stk.append(i)#     else:  # 出栈情况#         stk.pop()# result = ''# for i in stk:#     result += s[i]# return resultif __name__ == "__main__":obj = Solution()while True:try:s = input().strip()[1: -1]print(obj.removeDuplicates(s))except EOFError:break

32. 最长有效括号

该题按照索引而非元素入栈的方式来写,将遍历元素是不匹配时把索引全部入栈匹配时进行出栈,并计算此时的有效括号的长度,更新答案

'''
32. 最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"
题眼:括号匹配是使用栈解决的经典问题 —— 后遇到的左括号要先闭合
思路:1、这里从字符串里选择 最长的有效括号子串2、因为是求长度,所以需要有标志记录 起始位置,正好把 压入栈的数据 设置为 不匹配的元素的索引3、遇到匹配出栈时,就可以用 遍历元素索引 - 栈顶元素索引 = 当前有效括号序列长度
'''class Solution:def longestValidParentheses(self, s: str) -> int:# 情况1、字符串为空if not s:return 0# 情况2、用栈判断stk = []result = 0for i in range(len(s)):# 入栈的情况:栈为空、当前元素为(、栈顶元素为)——不匹配才需要入栈if len(stk) == 0 or s[i] == '(' or s[stk[-1]] == ')':stk.append(i)  # 压入栈的数据 设置为 不匹配的元素的索引else:  # 匹配出栈stk.pop()if len(stk) > 0:  # 此时依然要判断栈是否为空,因为可能存在上一步出栈,为空了result = max(result, i - stk[-1])else:result = max(result, i + 1)  # 栈为空,相当于上一个不匹配的位置是-1return resultif __name__ == "__main__":obj = Solution()while True:try:s = input().strip().split('=')[1].strip()[1: -1]print(obj.longestValidParentheses(s))except EOFError:break

20. 有效的括号

1、该说不说,这题首先先要把题意弄明白
2、该题有两种思路:思路1、与本章总结题型的大思路一致,充分利用栈的思想,在遍历字符串时遇到左括号按照对应的右括号形式添加(处理技巧),遇到右括号时判断匹配情况;思路2、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉成对的括号——更简单直观

'''
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。
有效字符串需满足:1、左括号必须用相同类型的右括号闭合。2、左括号必须以正确的顺序闭合。————这个应该是栈的特点3、每个右括号都有一个对应的相同类型的左括号。
示例 1:输入:s = "()"输出:true
题眼:括号匹配是使用栈解决的经典问题 —— 后遇到的左括号要先闭合 与 栈先进后出 的思想一致
思路1、充分利用栈的思想,在遍历字符串时遇到左括号按照对应的右括号形式添加(处理技巧),遇到右括号时判断匹配情况
思路2、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉成对的括号——更简单直观
'''class Solution:def isValid(self, s: str) -> bool:# 思路1、充分利用栈的思想,在遍历字符串时遇到左括号按照对应的右括号形式添加,遇到右括号时判断匹配情况# # 情况1、s长度为奇数,# if len(s) % 2 == 1:#     return False# # 情况2、s长度为偶数# stk = []# for ch in s:#     if ch == '(':#         stk.append(')')#     elif ch == '[':#         stk.append(']')#     elif ch == '{':#         stk.append('}')#     else:  # 说明到了右括号了#         if len(stk) == 0:  # 右括号多了#             return False#         elif ch != stk[-1]:  # 左右括号不匹配#             return False#         else:#             stk.pop()  # 元素正常出栈# if len(stk) > 0:#     return False  # 左括号多了# return True# 思路2、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉成对的括号——更简单直观stk = []for ch in s:stk.append(ch)if len(stk) >= 2:target = ''.join(stk[-2:])if target == '()' or target == '[]' or target == '{}':stk[-2:] = []if len(stk) == 0:return Truereturn Falseif __name__ == "__main__":obj = Solution()while True:try:s = input().strip().split('=')[1].strip()[1: -1]print(obj.isValid(s))except EOFError:break

1003. 检查替换后的词是否有效

1、这题把题意弄明白也很重要,它和“20. 有效的括号”是一个意思
2、该题也有两种思路:思路1、类似“20. 有效的括号”的思路一,遍历每个元素,分情况讨论入栈、出栈情况;思路2、类似“20. 有效的括号”的思路而,将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉成对的括号——更简单直观

'''
1003. 检查替换后的词是否有效
给你一个字符串 s ,请你判断它是否 有效 。
字符串 s 有效 需要满足:假设开始有一个空字符串 t = "" ,你可以执行 任意次 下述操作将 t 转换为 s :
将字符串 "abc" 插入到 t 中的任意位置。形式上,t 变为 tleft + "abc" + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。
示例 1:输入:s = "aabcbc"输出:true解释:"" -> "abc" -> "aabcbc"因此,"aabcbc" 有效。
题眼:这道题读懂题目很重要,它和“20. 有效的括号”是一个意思
思路1、类似“20. 有效的括号”的思路,遍历每个元素,分情况讨论入栈、出栈情况
思路2、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉目标子串——更简单直观
'''class Solution:def isValid(self, s: str) -> bool:# 思路1、类似“20. 有效的括号”的思路# stk = []# for ch in s:#     if ch == 'a':#         stk.append(ch)#     elif ch == 'b':#         if len(stk) == 0:#             return False#         elif stk[-1] == 'a':#             stk.append(ch)#         else:#             return False#     elif ch == 'c':#         if len(stk) == 0:#             return False#         elif stk[-1] == 'b':#             stk.pop()#             stk.pop()#         else:#             return False# if len(stk) == 0:#     return True# return False# 思路2、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉子串abc——更简单直观stk = []for ch in s:stk.append(ch)if len(stk) >= 3:target = ''.join(stk[-3:])if target == 'abc':stk[-3:] = []if len(stk) == 0:return Truereturn Falseif __name__ == "__main__":obj = Solution()while True:try:s = input().strip().split('=')[1].strip()[1: -1]print(obj.isValid(s))except EOFError:break

1910. 删除一个字符串中所有出现的给定子字符串

1、这题是上一题"1003. 检查替换后的词是否有效"的一般情况
2、该题不适合"1003. 检查替换后的词是否有效"的思路一了,因为没法加判断条件对入栈出栈分情况处理了;只能用思路二:将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉成对的括号——更简单直观
3、官方题解还有一种字符串匹配的思路,感觉不如栈的这种方式直观

'''
1910. 删除一个字符串中所有出现的给定子字符串
给你两个字符串 s 和 part ,请你对 s 反复执行以下操作直到 所有 子字符串 part 都被删除:
找到 s 中 最左边 的子字符串 part ,并将它从 s 中删除。
请你返回从 s 中删除所有 part 子字符串以后得到的剩余字符串。
一个 子字符串 是一个字符串中连续的字符序列。
示例 1:输入:s = "daabcbaabcbc", part = "abc"输出:"dab"解释:以下操作按顺序执行:- s = "daabcbaabcbc" ,删除下标从 2 开始的 "abc" ,得到 s = "dabaabcbc" 。- s = "dabaabcbc" ,删除下标从 4 开始的 "abc" ,得到 s = "dababc" 。- s = "dababc" ,删除下标从 3 开始的 "abc" ,得到 s = "dab" 。此时 s 中不再含有子字符串 "abc" 。
题眼:"1003. 检查替换后的词是否有效"的一般情况
思路、将栈当作一个特殊格式的存储空间,将元素全部遍历入栈,并总是在栈中去掉目标子串——更简单直观
'''class Solution:def removeOccurrences(self, s: str, part: str) -> str:# 情况1、s比part长度短if len(s) < len(part):return s# 情况2、用栈处理stk = []for ch in s:stk.append(ch)if len(stk) >= len(part):target = ''.join(stk[-len(part): ])if target == part:stk[-len(part): ] = []return ''.join(stk)if __name__ == "__main__":obj = Solution()while True:try:in_line = input().strip().split('=')s = in_line[1].strip().split(',')[0][1: -1]part = in_line[2].strip()[1: -1]print(obj.removeOccurrences(s, part))except EOFError:break

相关文章:

leetcode分类刷题:栈(Stack)(一、字符串相邻元素删除类型)

1、在leetcode分类刷题&#xff1a;基于数组的双指针&#xff08;一、基于元素移除的O(1)类型&#xff09;题目中&#xff0c;采用双指针之快慢指针的算法来解决。 2、字符串相邻元素的删除问题&#xff0c;用栈来进行管理&#xff0c;会非常有效&#xff1b;这种题型排在后面的…...

你还在找淘宝商品信息查询的接口吗?

你还在找淘宝商品信息查询的接口吗&#xff1f;&#xff0c;不用找了&#xff0c;我这有&#xff0c;免费测试 在很多行业&#xff0c;比如淘客、商品采集、刊登、数据分析行业都需要用到相关的商品接口&#xff0c;但是官方一般又没有开放这些接口&#xff0c;怎么办&#xff…...

dll修复精灵,dll修复工具下载方法分享,mfc140u.dll缺失损坏一键修复

今天&#xff0c;我将为大家分享一个关于mfc140u.dll的问题。首先&#xff0c;我想问一下在座的网友们&#xff0c;有多少人知道mfc140u.dll是什么&#xff1f;又有多少人知道它的作用以及如何解决这个问题呢&#xff1f;在接下来的演讲中&#xff0c;我将详细介绍mfc140u.dll的…...

[LINUX使用] iptables tcpdump

iptables: 收到来自 10.10.10.10 的数据后都丢弃 iptables -I INPUT -s 10.10.10.10 -j DROP 直接 reject 来自 10.10.10.* 网段的数据 iptables -I INPUT -s 10.10.10.0/24 -j REJECT tcpdump: dump eth0的数据到本地 tcpdump -i eth0 -w dump.pcap 只抓 目的地址是 10…...

百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载

8月31日&#xff0c;文心一言率先向全社会全面开放。广大用户可以在应用商店下载“文心一言APP”或登陆“文心一言官网”&#xff08;https://yiyan.baidu.com&#xff09; 体验。同时&#xff0c;企业用户可以直接登录百度智能云千帆大模型平台官网&#xff0c;调用文心一言能…...

【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理

目录 数据清洗和处理 1.处理缺失值 1.1 删除缺失值&#xff1a; 1.2 填充缺失值&#xff1a; 1.3 插值&#xff1a; 2 数据类型转换 2.1 数据类型转换 2.2 日期和时间的转换&#xff1a; 2.3 分类数据的转换&#xff1a; 2.4 自定义数据类型的转换&#xff1a; 3 数…...

【vue】使用无障碍工具条(详细)

引入&#xff1a;使用的是太阳湾的无障碍工具条&#xff0c;代码地址&#xff1a;https://gitee.com/tywAmblyopia/ToolsUI 具体步骤&#xff1a;下载代码后&#xff0c;将其中的 canyou 文件夹拖入 vue 项目中的 public 文件夹中&#xff1b; 上图是在项目目录中的样子&#…...

java实现命令模式

命令模式是一种行为设计模式&#xff0c;它允许您将请求封装为对象&#xff0c;以便您可以将其参数化、队列化、记录和撤销。在 Java 中实现命令模式涉及创建一个命令接口&#xff0c;具体命令类&#xff0c;以及一个接收者类&#xff0c;该接收者类执行实际操作。下面是一个简…...

【PowerQuery】PowerQuery学习路径

PowerQuery这么好,怎么去学习呢?相信很多初读本书的朋友迫切的希望了解整个PowerQuery全景知识和它提供的相应的功能。但是对于PowerQuery来说,一开始就会进行自定义函数的构建当然也是不可能的,这里有相应的学习路径来进行由浅入深的学习,帮助读者更好的理解PowerQuery的…...

JDK7多线程并发环境HashMap死循环infinite loop,CPU拉满100%,Java

JDK7多线程并发环境HashMap死循环infinite loop&#xff0c;CPU拉满100%&#xff0c;Java HashMap底层数据实现是数组链表&#xff0c;链表在哈希碰撞后装入新数据&#xff0c;像是一个桶。 HashMap在JDK7的实现中&#xff0c;并发环境存在死循环infinite loop问题。导致的结果…...

Linux下的系统编程——认识进程(七)

前言&#xff1a; 程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等.下面让我们开始对Linux进程有个…...

2023年9月CSPM-3国标项目管理中级认证报名,找弘博创新

CSPM-3中级项目管理专业人员评价&#xff0c;是中国标准化协会&#xff08;全国项目管理标准化技术委员会秘书处&#xff09;&#xff0c;面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系&#xff0c;建立健全人才职业能力评价和激励机制的要…...

使用ChatGLMTokenizer处理json格式数据

我下载了一些中文wikipedia数据&#xff0c;准备采用ChatGLMTokenizer对齐进行清洗&#xff0c;整理为预训练语料。 import numpy as np import json from tqdm import tqdm from chatglm_tokenizer.tokenization_chatglm import ChatGLMTokenizertokenizer ChatGLMTokenizer…...

Redis基础特性及应用练习-php

redis持久化&#xff08;persistence&#xff09; redis支持两种方式的持久化&#xff0c;可以单独使用或者结合起来使用。 第一种&#xff1a;RDB方式&#xff08;redis默认的持久化方式&#xff09; rdb方式的持久化是通过快照完成的&#xff0c;当符合一定条件时redis会自…...

Numpy知识点回顾与学习

Numpy知识点回顾与学习 什么是Numpy&#xff1f; Numpy使用Python进行科学计算的基础包。因为机器学习当中很多都会用到数组、线性代数等知识&#xff0c;经常需要和数组打交道&#xff0c;所以Numpy学习成为了科研之路上必须掌握的一门技能。Numpy包含以下的内容&#xff1a…...

H.264视频编码推荐的分辨率和码率配置表

Video Encoding Settings for H.264 Excellence 针对H.264编码格式&#xff0c;根据不同分辨率&#xff0c;推荐其对应的码率配置关系如下图所示&#xff1a; 如下为上限&#xff0c;超过这个上限再增加码率基本无太大意义&#xff01;根据业务场景、帧率&#xff0c;建议码率…...

Greenplum 实用工具-gpaddmirrors

注&#xff1a;本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/utility_guide-ref-gpaddmirrors.html gpaddmirrors工具用于向未配置镜像的Greenplum数据库系统添加镜像segment。 语法 gpaddmirrors [-p <port_offset>] [-m <datadi…...

详解 Cent OS JDK 8.0 安装配置

环境配置 云服务器云耀云服务器L操作系统CentOS 7.9 64bit | 公共镜像JDK版本64 bit JDK 1.8 下载地址 JDK官网下载地址Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8百度网盘 ARM64 链接&#xff1a;https://pan.baidu.com/s/1wQ1mp…...

代理IP与网络安全在跨境电商中的关键作用

跨境电商已成为全球商业的重要组成部分&#xff0c;然而&#xff0c;随之而来的网络安全问题也日益凸显。为了在海外市场取得成功&#xff0c;不仅需要优质的商品和服务&#xff0c;还需要稳定、安全的网络连接。本文将介绍如何运用Socks5代理IP技术解决这些挑战。 1. 代理IP与…...

Kafka3.0.0版本——消费者(消费方式)

目录 一、Kafka 消费方式1.1、pull&#xff08;拉&#xff09; 模式1.2、push &#xff08;推&#xff09;模式1.3、Kafka采用pull&#xff08;拉&#xff09; 模式缺点 一、Kafka 消费方式 1.1、pull&#xff08;拉&#xff09; 模式 consumer采用从broker中主动拉取数据。K…...

uni-app rich-text组件富文本图片展示不全问题

背景&#xff1a;phpfastadmin富文本插件上传富文本内容到数据库&#xff0c;uni-app渲染富文本内容。这里后端不需要特殊处理。uni-app的rich-text组件展示图片跑板。直接贴代码。 <template><view><title-bar title"会员动态" back backcolor"…...

文件包含漏洞学习小结

目录 一、介绍 二、常见文件包含函数 三、文件包含漏洞代码举例分析 四、文件包含漏洞利用方式 4.1 本地文件包含 1、读取敏感文件 2、文件包含可运行的php代码 ①包含图片码 ②包含日志文件 ③包含环境变量getshell ④临时文件包含 ⑤伪协议 4.2 远程文件包含 4.…...

同时安装python2和3解决方案

我先安装python3后&#xff0c;按照网上步骤&#xff0c;继续安装好python2&#xff0c;直接运行python -v只能显示python2&#xff0c;运行python3找不到此命令&#xff0c;通过https://blog.csdn.net/qq_64409509/article/details/131514944这篇文章找到了解决方案&#xff0…...

通过jr-qrcode生成二维码并下载到客户端本地(Vue)

生成二维码 首先生成二维码图片的地址 引入jr-qrcode import jrQrcode from jr-qrcode; 生成二维码图片的地址 // 生成二维码地址 getQRCodeUrl(spreadUrl) {const QRCodeUrl jrQrcode.getQrBase64(spreadUrl);return QRCodeUrl; }that.backUrl jrQrcode.getQrBase64(da…...

命令执行漏洞(附例题)

一.原理 应用有时需要调用一些执行系统命令的函数&#xff0c;如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等&#xff0c;当用户能控制这些函数的参数时&#xff0c;就可以将恶意系统命令拼接到正常命令中&#xff0c;从而造成命令执行攻击。 二.利用条…...

iOS开发Swift-类型转换

1.Int或Double转字符串 let x 20 let y "\(x)" let z String(x)2.Double转Int(去掉小数点后面的) Int(1.9)3.Int转Double Double(1)4.向上转型 class A{//A父类 }class B: A{//B子类继承A }let a A() let b B()b as A //子类转化成父类5.向下转型 class A{//A…...

python基础爬虫反爬破解

文章目录 爬虫初识1. HTTP协议与WEB开发&#xff08;1&#xff09;简介&#xff08;2&#xff09;socket套接字&#xff08;3&#xff09;请求协议与响应协议 2. requests&反爬破解&#xff08;1&#xff09;UA反爬&#xff08;2&#xff09;referer反爬&#xff08;3&…...

Maven 必备技能:MAC 系统下 JDK和Maven 安装及环境变量配置详细讲解

开发中难免因系统问题或者版本变更反复折腾JDK和Maven环境变量&#xff0c;干脆写个笔记备忘个&#xff0c;也方便小伙伴们节省时间。 JDK安装与环境变量配置 1.官网下载jdk mac安装包: Java Downloads | Oracle " https://www.oracle.com/java/technologies/downloads…...

electron笔记无边框窗口、DLL调用、DLL函数返回指针

无边框 const win new BrowserWindow({width: 1290,height: 736,minHeight: 736,minWidth: 1040,maxHeight: 736,maxWidth: 1290,frame: false, // 无边框webPreferences: {// preload: process.env.WEBPACK_DEV_SERVER_URL ? __dirname /preload.js : app://./preload.js,…...

递归算法学习——黄金矿工,不同路径III

目录 ​编辑 一&#xff0c;黄金矿工 1.题意 2.题目分析 3.题目接口 4.解题思路及代码 二&#xff0c;不同路径III 1.题意 2.解释 3.题目接口 4.解题思路及代码 一&#xff0c;黄金矿工 1.题意 你要开发一座金矿&#xff0c;地质勘测学家已经探明了这座金矿中的资源…...