- 博客(134)
- 收藏
- 关注
原创 【ReadMe】博客导航 -- 针对本人原创博客内容进行分类(优先读)
数据库计算机网络、计算机操作系统PythonDocker与微服务K8Shttps://blog.csdn.net/zone_/article/details/82528469?spm=1001.2014.3001.5502添加链接描述数据结构与算法
2022-04-28 02:19:12
3749
原创 2026年8月国内外主流大模型怎么选:GLM、Kimi、MiniMax、火山方舟、MiMo、Qoder、DeepSeek 全整理
2026年8月国内主流AI编程/多模型服务套餐推荐摘要: 智谱GLM Coding Plan(GLM-5.3全量上线)成为国产编程天花板,Pro档¥538/月最具性价比,支持1M长上下文,但新用户价格较7月翻倍。 火山方舟限时优惠中,Coding/Agent Plan¥49.9起可体验GLM-5.3、Kimi-K3等多模型,适合需要多模态能力的用户。 MiniMax Token Plan保持M3主力地位,多模态共享额度,Ultra档¥469适合重度开发。 Kimi Code的K3模型需¥99档起解锁,8月2
2026-08-19 13:40:35
876
原创 010-02:RAG 入门-索引优化,构建有层次的索引
这就像在一个巨大的超市里找东西,如果没有分区标识,你需要在所有货架上逐一查找。层次化索引就是为数据建立"分区导航",先快速定位到相关区域,再在小范围内精确查找,大幅提升检索效率。前面我们学习了"从小块到大上下文"技术,解决了检索精度与上下文完整性的矛盾。本文是 refine-rag 系列教程的第十五篇,我们来学习索引优化中的层次化索引技术。:有2020-2023年的世界富豪榜数据,用户查询"2023年首富是谁?:建立两个向量数据库,一个存摘要,一个存详情。:电商平台有数百万商品,用户搜索"红色连衣裙"
2026-04-12 19:55:07
572
原创 010-01:RAG 入门-索引优化,从小块到大上下文:提升检索精度与上下文完整性
但在实际应用中,我们遇到了一个矛盾:检索时需要小文本块来提高精度,但理解时需要大文本块来保证上下文完整。这就像在图书馆找资料,你用关键词快速定位到某一页,但要真正理解内容,你需要阅读整个章节。这篇文章将介绍如何解决这个矛盾,实现"用小块检索,用大块理解"。本文是 refine-rag 系列教程的第十四篇,我们来学习索引优化中的"从小块到大上下文"技术。:文档先切成大块(父),再把大块切成小块(子)。:像放大镜一样,检索到一个句子后,自动展示它前后的句子。:检索到目标块后,动态获取它前面和后面的文本块。
2026-03-26 22:41:03
507
原创 009-03:RAG 入门-RAG 优化,查询路由技术详解
",如果你有 Python、JavaScript、Go 三个文档库,显然应该只在 Python 文档库中搜索,而不是在所有文档中搜索。前面我们学习了查询构建和查询翻译技术,知道如何优化查询内容。查询路由就是这样的"导诊系统",它根据用户的问题内容,智能地将查询发送到最合适的数据源或处理流程。本文是 refine-rag 系列教程的第十三篇,我们来学习检索前处理的查询路由技术。将数据源描述和查询都转换为向量,通过计算相似度选择最匹配的数据源。这时候就需要查询路由技术,根据查询内容智能分发到最合适的数据源。
2026-03-25 23:13:43
596
原创 009-02:RAG 入门-RAG 优化,查询翻译技术详解
但还有个问题:用户的查询往往是口语化、模糊的,直接用来检索效果不好。比如用户说"那个,我刚开始玩这个游戏,感觉很难,在普陀山那一关,嗯,怎么也过不去",这样的查询很难匹配到相关文档。查询翻译就是把用户的原始查询"翻译"成更适合检索的形式。本文是 refine-rag 系列教程的第十二篇,我们来学习检索前处理的查询翻译技术。• 原始查询:"那个,我刚开始玩这个游戏,感觉很难,在普陀山那一关,嗯,怎么也过不去"这时候就需要查询翻译技术,将用户的原始查询"翻译"成更适合检索的形式。
2026-03-23 23:56:44
267
原创 009-01:RAG 入门-RAG 优化,查询构建技术详解
这时候就需要查询构建技术,将自然语言转换为结构化查询,结合向量检索的语义理解和结构化查询的精确性。查询构建就是把自然语言查询转换为结构化查询语言(SQL、Cypher、元数据过滤器等)。本文是 refine-rag 系列教程的第十一篇,我们来学习检索前处理的查询构建技术。2. Text-to-Cypher(自然语言转图查询)• Text-to-Cypher(自然语言转图查询)• 找到包含"演员"、"年龄"、"30岁"的文档。• Text-to-SQL(自然语言转SQL)
2026-03-22 11:46:00
366
原创 008-03:RAG 入门-向量存储中向量搜索和度量方法
ANN (Approximate Nearest Neighbor) 是最基础的向量搜索,找到与查询向量最相似的 Top-K 个结果。向量搜索不是简单的"找最近的",而是一门艺术。不同的距离度量方式、不同的搜索策略,会带来完全不同的结果。搜索"好看的电影",不想结果全是"漫威电影",而是希望每个类型(动作、喜剧、科幻)都返回几部。不是找"最近的 5 家餐厅",而是找"距离我 1-3 公里之间的所有餐厅"。在图书馆找最相关的 5 本书。在图书馆找书,但只在"2020年后出版"且"评分>4.5"的书中找。
2026-03-21 20:51:53
391
原创 008-02:RAG 入门-向量存储索引算法详解
DiskANN 是微软开发的基于磁盘的索引算法,通过精心设计的图结构和缓存策略,实现在磁盘上也能高效搜索。IVF (Inverted File) 通过聚类算法将向量空间分成多个区域(称为"桶"或"聚类中心"),搜索时只在最相关的几个区域内查找。它通过特殊的数据结构,让你能快速找到与查询向量最相似的向量,而不需要逐个比较所有向量。找书时,先确定是哪个类别,然后只在那个类别的书架上找,而不是整个图书馆都翻一遍。建立多个不同的分类系统(比如按作者、按年代、按主题),查找时同时在多个系统中搜索,然后合并结果。
2026-03-19 11:45:44
615
原创 008-01:RAG 入门-向量存储与企业级向量数据库 milvus
向量数据库不仅仅是“存数据”,它还提供了成熟的 CRUD、多租户隔离、数据备份和水平扩展(Scale-out)能力,这些是简单的内存库(如 FAISS)难以胜任的。向量数据库专门优化了数据的压缩与加载策略。本文是 refine-rag 系列教程的第八篇,我们来学习向量存储的核心技术和 Milvus 数据库的使用。向量数据库就像是为向量量身定制的"仓库管理系统",它不仅能存储海量向量,还能快速检索、高效管理。:擅长模糊搜索,基于向量索引(HNSW、IVF),返回的是 Top-K 个“最相似”的候选者。
2026-03-18 14:17:31
389
原创 007:RAG 入门-向量嵌入与检索
都变成一块独立的“小磁铁”。搜索时,把你的问题也拆成“小磁铁”,然后去文档里一块一块地对吸。:想象一下,一段话有20个词,问题有5个词,那就需要比较 20 x 5 = 100 次。通常很多面试官问你的问题,都会涉及到混合检索,或者说也是你的回答要点之一。:由于“狗”这个词的磁铁完美匹配上了,系统就能精准地找到包含“狗”的这句话,并返回给你。:因为它进行的是“词对词”的精细对比,能捕捉到具体的术语和表述,即使整体意思不完全一样。:系统会用你问题里的每个“小磁铁”,去文档里寻找能“吸住”(即相似)的磁铁。
2026-03-17 14:55:36
318
原创 006:RAG 入门-面试官问你,RAG 为什么要切块?
最简单的切块方式,按固定字符数分割文本。这种切块方式很简单,但是缺点也很明显:很容易切断语义完整性,比如:一个句子被切分成了两个块,那么这个句子的语义就会丢失。以下各种切块策略对比,可以根据使用场景来选择,当然了,也可以多种组合使用,比如技术文档,先基于 markdown 分段,然后再使用递归或者代码切块。前面花费了挺多时间去学习怎么读取数据的,那么在读取数据之后,我们要做的操作就是切块,那么什么是切块?4. 省钱,大模型 api 是按 toekn 收费的,省时间,上下文长度越长,大模型处理的时间越长。
2026-03-10 16:56:19
334
原创 005:RAG 入门-LangChain读取表格数据
本文是 refine-rag 系列教程的第五篇,全面讲解如何处理 CSV、PDF 表格等结构化数据。本文将介绍 4 种主流的表格处理方案,并实现一个完整的表格问答系统。专业的 PDF 表格提取工具,基于 PDF 的矢量信息。• 方案三:pdfplumber 提取 PDF 表格。方案三:pdfplumber 提取 PDF 表格。最智能的表格提取方案,自动识别表格结构和上下文。• 方案二:Camelot 提取 PDF 表格。轻量级的 PDF 表格提取工具,速度快且易用。1. LangChain 读取文本数据。
2026-03-06 11:03:41
311
原创 004:RAG 入门-LangChain读取PDF
本文将介绍 4 种主流的 PDF 处理方案,从简单到复杂,从快速到智能,帮你找到最适合的方案。本文是 refine-rag 系列教程的第四篇,深入讲解如何使用多种方案处理 PDF 文档。PDF 是最常见的文档格式,但也是最难处理的格式之一。更强大的 PDF 处理库,提供丰富的元数据和控制能力。• 方案三:Unstructured(智能解析)最智能的 PDF 处理方案,自动识别文档结构。最简单的 PDF 处理方案,适合纯文本提取。方案三:Unstructured(智能解析)
2026-03-06 11:03:41
462
原创 002:RAG入门-LangChain读取文本数据
前面学习了 RAG 的概念和 LCEL 的语法,现在来继续学习 LangChain 读取文本数据的使用方法。在构建 RAG 系统时,数据加载是第一步,也是非常关键的一步。LangChain 提供了丰富的 Document Loaders,可以轻松处理各种格式的数据源。本文是 refine-rag 系列教程的第二篇,带你掌握 LangChain 的各种文本数据加载方式。Markdown 是技术文档的常用格式,LangChain 提供了专门的加载器。批量加载目录下的多个文件,支持文件过滤和多线程加载。
2026-03-05 11:04:08
393
原创 003:RAG入门-LangChain 读取图片数据
这些数据如果不能被 RAG 系统处理,就会造成信息的缺失。在前面的文章中,我们学习了如何读取纯文本数据。但在实际应用中,很多重要信息都存储在图片、PPT、扫描件等非文本格式中。本文是 refine-rag 系列教程的第三篇,教你如何使用 LangChain 处理图片和 PPT 等多媒体数据。使用 Unstructured 的 OCR 功能提取图片中的文字。PPT 是常见的演示文稿格式,包含文字、图片、图表等多种元素。:默认使用英文 OCR,如果是中文图片,识别效果可能不佳。
2026-03-05 11:04:08
364
原创 001:LangChain的LCEL语法学习
本文介绍了LangChain表达式语言(LCEL)的基础用法,通过管道符(|)连接Prompt、Model和OutputParser构建处理链。文章演示了如何使用LCEL生成人物生平并转换为文言文,以及通过RunnableParallel和RunnablePassthrough实现并行处理和原样传递数据。提供了从DeepSeek和DashScope获取API密钥的方法,并展示了完整的代码示例。最后列出了RAG技术的学习路径,包括数据处理、向量嵌入、检索优化等关键环节。所有代码已在GitHub开源(https
2026-03-04 16:02:17
419
原创 001:LCEL 语法学习
LCEL (LangChain Expression Language),语言链表达式语言,是LangChain的表达式语言,用于描述数据处理逻辑。想要尽快掌握的话,可以教大模型给你出几道 LCEL 相关的题目给你,写完之后叫AI 给你评分并指导正确答案。ok,这些你掌握之后,就算基本掌握了 LCEL 的语法了,后续学习中可能会陆陆续续用到这些知识。当你需要把一份输入分发给多个组件,或者构造一个复杂的字典传给下一个环节时,用它。它像是一个透明的管道,把输入数据直接传给下一级,不做任何修改。
2026-03-04 11:00:53
280
原创 000:简单 RAG 入门
还有你需要知道的是:RAG 可以解决一些时效性的问题和幻觉问题。相比 Fing-turning 微调,RAG 更节省成本,而且数据可以溯源,可以知道相关的知识点源自哪个文档。在学习 RAG 之前,我们先来对比一下 RAG 和 AI Agent 的概念,只有先了解这些概念,才能继续往前推进。当然了,这个流程也是简化过的,不过不用在意,这个只是便于你理解这个概念。执行:规划好之后,可以执行具体的任务,并根据结果来执行下一步任务。规划:规划步骤,比如说买机票可以先查日期,再查天气,然后买机票。
2026-03-04 11:00:53
392
原创 准备写一个LangChain系列的RAG教程
最近浏览一下小红书,经常能刷到后端、前端转 RAG、Agent 工程师的笔记,所以我在学习这些内容之后,也准备分享一下我所学到的的知识(之前学习了黄佳老师的课程),一来是巩固一下自己的知识,二来是分享给有需要的朋友。因为 LangChain 只支持 Python 和 TS,而我之前就会 Python,为了降低学习成本,所以本系列教程是用 Python 编程语言。LangChain 读取 PDF 数据。LangChain 读取文本数据。LangChain 读取图片数据。LangChain 读取表格数据。
2026-03-03 11:01:06
261
原创 简单 RAG 入门(01)
本文介绍了RAG(检索增强生成)和AI Agent的基本概念及应用。RAG通过检索外部知识库来增强大模型的回答能力,能解决时效性和幻觉问题,比微调更节省成本。AI Agent则是能执行具体任务的智能助手,具备规划、记忆、工具使用和执行能力。文章提供了基于LlamaIndex(使用千问大模型)和LangChain(使用DeepSeek大模型)的RAG实现示例,包括环境准备、API配置、文档加载、向量索引构建和查询流程。代码示例展示了如何加载文档、创建向量索引,并通过提问获取基于检索内容的回答。
2026-02-03 16:04:48
398
原创 什么是MCP?MCP服务端代码实例初体验
MCP(模型上下文协议)是一种标准化AI模型与外部工具交互的通信协议,定义了工具、资源和提示三种核心元素。它支持多种通信模式:STDIO用于本地高效通信,SSE实现单向实时推送,Streamable HTTP提供双向流式交互。通过Python的fastmcp库可快速搭建MCP服务,使用装饰器定义功能模块,并集成到Cherry Studio等开发工具中调用。该协议简化了AI系统与外部服务的集成,适用于不同场景的智能交互需求。
2025-08-13 01:31:35
891
原创 docker-compose 搭建 TDengine 并进行简单增删改查
最近因为项目需要,接触了时序数据库:influxdb、TDengine由于 influxdb 是单机开源,因此我在查资料的时候,看到挺多从 influxDB 转到 TDengine 的,以下是两者的对比。docker-compose.yml进入容器:进入数据库,执行:体验 TDengine...
2022-06-30 09:30:09
1557
原创 mobaxterm 出现 Server refused our key 的问题
mobaxterm 是 Windows 下比较好用的终端工具。在服务器 A 中配置了 Windows 的公钥,但是通过密钥免密连接的时候,出现以下错误:解决方案https://superuser.com/questions/1678830/server-refused-our-key-only-from-mobaxterm-bookmark-setup据说是 OpenSSH 8.8 之后,屏蔽了 RSA 签名算法导致的。查看你的 OpenSSH 版本:打开 ssh 配置文件:追加以下配置:(
2022-06-23 13:28:40
5276
3
原创 从源码剖析Golang的切片是如何扩容的?
最近在跟小伙伴讨论 Golang 切片的扩容机制,好一些文章的结论都是错误的。在这里,我也带着好奇心去翻阅了源码。那么我就把我理解的 Golang 扩容机制梳理一下。如果当前所需容量 (cap) 大于原先容量的两倍 (doublecap),申请容量(newcap)为当前所需容量(cap),再在此的基础上进行内存对齐,对齐之后,则为最终的容量。至于 newcap 最终是怎么计算的?详见底下的源码展示如果当前所需容量(cap)小于原来容量的两倍(doublecap),则:如果原切片长度(old.len)小于10
2022-06-07 23:58:00
763
原创 Golang的defer底层原理是怎么样的?
前言如果你用过 defer ,那么你会大概知道 defer 是用于延迟函数的调用。每次调用 defer 都会将一个函数压入栈中,执行的时候从栈顶取出函数来执行,那么它底层的原理到底是怎么样的?今天我们一起来探究一下。defer 的使用规则延迟函数的参数在defer语句出现时就已经确定下来了func test() { num := 0 defer fmt.Println(num) num = 3 return}输出:0在定义 defer fmt.Println(
2022-05-29 16:03:43
703
原创 Golang中的map是线程安全的吗?
答案是否定的Golang 的 map 在设计之初,就不是用来应对线程安全的,设计团队认为有写并发的需求,但是读的需求更为普遍,不想因为写并发去加入一个锁,从而影响了读需求比较多的使用者的性能。上面这段话,有一点点绕,应该也很容易理解,当然,为了应对写并发,在 1.9 版本的时候,就有了 sync.map ,sync.map 是线程安全的。map 的底层是怎么样的?关于 map 的底层,它是一个叫 hmap 的结构体,我们可以查看一下源码:(我的 go 版本 1.17)/在你的 go 目录下 /go
2022-05-26 12:01:51
1323
原创 Golang的channel底层是怎么实现的?
前言上次分享了 goroutine 的底层原理和 GMP 的调度模型,这次来看看 Golang 的 channel 底层是怎么实现的?本文为作者原创,转载请注明出处。什么是 channel简单地说,channel 是管道,负责 goroutine 之间的消息传递和事件通知。如何理解 channel 的结构体关于 channel 的底层,它是一个叫 hchan 的结构体,我们可以查看一下源码:(我的 go 版本 1.17)/在你的 go 目录下 /go/src/runtime/chan.goc
2022-05-26 01:19:11
665
原创 深入理解 goroutine 底层原理与 GMP 调度模型
,goroutine,线程内存 占用,“创建一个goroutine 的栈内存消耗为2KB,实际 运行过程中,如果栈空间不够用,会自动进行 扩容”,创建一个线程的栈内存消耗为1MB创建 和销 毀,“goroutine 因为是由Go runtime负责管理的,创 建和销毁的消耗非常小,是用户级。”,“线程创建和销毀都会有巨大的消耗,因为要和操 作系统打交道,是内核级的,通常解决的办法就 是线程池”切换,“goroutines 切换只需保存三个寄存器: PC、 SP、BP goroutine 的切换约为20
2022-05-25 21:25:37
1217
原创 MySQL mvcc是什么?mvcc 解决了什么问题?如何解决的?
本文为作者原创,转载请注明出处mvcc 是什么?Multi-Version Concurrency Control,多版本并发控制,缩写就是 MVCC。说得通俗一点就是:MySQL 的数据有很多个版本,假设我们数据库中有个字段:age(年龄),每更新一次 age,MySQL 都会记录一个版本,就像微信 APP 更新那样,有一个版本号。mvcc 解决了什么问题?读写不冲突,极大的增加了系统的并发性能解决脏读,幻读,不可重复读 等问题mvcc 原理是什么?数据库的每个字段都包含了以下信息,就
2022-05-20 22:37:59
648
原创 LeetCode-21. 合并两个有序链表 -- Python解
原题描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列来源:力
2022-04-27 17:05:55
1537
原创 LeetCode-25. K 个一组翻转链表 -- Python解
原题描述给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]提示:链表中的节点数目为 n1
2022-04-27 14:45:10
421
原创 LeetCode-15. 三数之和 -- Python解
原题描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-
2022-04-27 14:39:50
245
原创 LeetCode-3. 无重复字符的最长子串 -- Python解
原题描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,
2022-04-27 14:36:31
370
原创 LeetCode-146. LRU 缓存 -- Python解
题目描述请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操
2022-04-27 14:33:18
636
原创 LeetCode-206. 反转链表 -- Python解
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-li
2022-04-27 14:28:55
1479
原创 LeetCode-200. 岛屿数量 -- Python解
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入:grid = [ ["1"
2022-04-27 13:10:06
799
原创 LeetCode-46. 全排列 -- Python解
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 <= nums[i] <= 10
2022-04-27 13:05:16
737
原创 LeetCode-34. 在排序数组中查找元素的第一个和最后一个位置 -- Python解
class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: none_result = [-1, -1] if not nums: return none_result result = [] for index, num in enumerate(nums): if num ==
2022-04-21 23:59:37
320
原创 LeetCode-3. 无重复字符的最长子串 -- 滑动窗口 -- Python解
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke”
2022-04-21 23:56:45
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅