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

2026-05-12:最大的偶数。用go语言,给定一个只由字符 ‘1‘ 和 ‘2‘ 组成的字符串 s。 你可以从中任意删除一些字符,但剩下的字符的相对顺序必须保持不变。 你需要从所有可能的“删除后字符

2026-05-12:最大的偶数。用go语言,给定一个只由字符 ‘1’ 和 ‘2’ 组成的字符串 s。

你可以从中任意删除一些字符,但剩下的字符的相对顺序必须保持不变。

你需要从所有可能的“删除后字符串”中,找出能表示偶数整数的结果字符串里,数值最大的那个,并返回它。

若所有删除方案都无法组成偶数整数,则返回空字符串 “”。

1 <= s.length <= 100。

s 仅由字符 ‘1’ 和 ‘2’ 组成。

输入: s = “1112”。

输出: “1112”。

解释:

该字符串已经表示了最大的偶数,因此不需要删除任何字符。

题目来自力扣3798。

题目解题过程分步详解

一、分步骤解题过程

步骤1:判断是否存在合法偶数

因为只有字符2是偶数,所以字符串中必须至少有一个’2’,才能组成偶数;如果没有’2’,直接返回空字符串。

步骤2:确定偶数的核心要求

要让整数是偶数,最终字符串的最后一位必须是’2’,这是硬性条件。

步骤3:寻找数值最大的偶数

要让数值最大,需要满足两个关键点:

  1. 长度最长:保留尽可能多的字符;
  2. 结尾为2:必须以2结尾(满足偶数要求)。

最优方案:
找到字符串中最后一个出现的’2’,保留这个’2’,同时保留这个’2’前面的所有字符
原因:

  • 保留最后一个2,能保证前面所有字符都不被丢弃,字符串长度最长;
  • 长度最长 → 数值一定最大;
  • 结尾是2 → 满足偶数要求。

步骤4:处理结果格式

保留最后一个2及它前面的所有字符后,这个字符串就是答案。
(举例:输入1112,最后一个2是第4位,保留前面所有1+这个2,结果就是1112


二、对应代码的执行逻辑(文字描述)

代码strings.TrimRight(s, "1")的作用:

  1. 从字符串的最右侧开始,逐个删除字符1
  2. 直到遇到第一个非1的字符(也就是2)就停止;
  3. 最终结果就是:最后一个2 + 它前面的所有字符,完全符合我们的解题逻辑。

以输入1112为例:

  • 字符串右侧第一个字符是2,不是1,所以不删除任何字符;
  • 直接返回原字符串1112

三、时间复杂度 & 额外空间复杂度

1. 总时间复杂度

O(n),n 是输入字符串的长度。

  • 代码核心是TrimRight函数,它需要从右向左遍历一次字符串,遍历次数最多等于字符串长度;
  • 整个过程只做了一次线性遍历,没有嵌套循环,因此时间复杂度为线性复杂度 O(n)。

2. 总额外空间复杂度

O(n)

  • 代码会创建并返回一个新的字符串存储结果,新字符串的长度最大等于原字符串长度;
  • 除了输入和输出字符串外,没有使用其他额外的数据结构,因此额外空间复杂度为 O(n)。

总结

  1. 解题核心:必须以最后一个2结尾,保留其前面所有字符,得到最长且最大的偶数;
  2. 时间复杂度:O(n)(线性遍历);
  3. 额外空间复杂度:O(n)(存储结果字符串)。

Go完整代码如下:

packagemainimport("fmt""strings")funclargestEven(sstring)string{returnstrings.TrimRight(s,"1")}funcmain(){s:="1112"result:=largestEven(s)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-deflargest_even(s:str)->str:returns.rstrip('1')if__name__=="__main__":s="1112"result=largest_even(s)print(result)

C++完整代码如下:

#include<iostream>#include<string>#include<algorithm>std::stringlargestEven(conststd::string&s){// 找到最后一个不是 '1' 的位置size_t pos=s.find_last_not_of('1');if(pos==std::string::npos){return"";// 如果全是 '1',返回空字符串}returns.substr(0,pos+1);}intmain(){std::string s="1112";std::string result=largestEven(s);std::cout<<result<<std::endl;return0;}

http://www.jsqmd.com/news/799576/

相关文章:

  • 小红书自动化工具redbook-cli:命令行操作与AI Agent集成指南
  • 米尔肯大会热议AI发展:瓶颈凸显,技术架构与主权问题引深思
  • Arm CoreLink GFC-200 Flash控制器架构与低功耗设计解析
  • Windows Defender Remover:自动化系统优化工具,实现30%性能提升与完全安全控制
  • 量子噪声对机器学习模型的影响与优化策略
  • FairMOT vs. ByteTrack vs. DeepSORT:多目标跟踪算法怎么选?附实测对比
  • NXP S32K144车规MCU:BMS电池管理选型指南
  • 【限时技术白皮书】:DeepSeek v3.2 Function Calling全链路调试日志解密(仅开放72小时)
  • 深入GCC编译器:pragma diagnostic push/pop指令的工作原理与高级用法全解析
  • Cursor AI 编程助手配置优化:一键安装与自定义指南
  • 从HLW8110电路图讲起:搞懂交流采样中的‘隔离’与‘共地’到底怎么选
  • 别再乱猜初值了!用Python手把手教你验证Newton法的收敛性(附代码)
  • CSP-J/S 2020 真题精讲:从“优秀的拆分”看二进制位运算的实战应用
  • LeetCode热题100-环形链表 II
  • 量子-经典混合编译:MLIR框架下的优化与实践
  • SCL3300倾角传感器除了测角度,还能在NRF52832项目里玩出什么花样?
  • 深度对俄本地化的电商工具Captain AI
  • 别再只用SE-Net了!手把手教你用ECA-Net(CVPR2020)给ResNet/MobileNetV2涨点,附PyTorch代码
  • 为Cursor编辑器打造液态玻璃主题:安装、配置与深度自定义指南
  • 《美国发明法案》下企业专利策略转型:从先发明到先申请的制度重塑与应对
  • 从手忙脚乱到智能掌控:League-Toolkit如何解决你的英雄联盟痛点
  • 基于FPGA的PCIe设备全模拟:从DMA原理到硬件安全测试实践
  • LeanDojo:用机器学习自动化数学定理证明的Python工具包
  • 技术债务的职场政治:谁该为历史遗留问题买单
  • 别再只懂PCA了!用Python手写LDA降维,从鸢尾花数据集实战看分类效果
  • ZeroMQ实战:解锁无代理异步消息传递的架构优势
  • 从体温发电到LED闪烁:热电转换戒指的微型化设计与工程实践
  • 2026年5月TIOBE编程语言排行榜,Go语言排名第16,Rust语言排名15。统计编程语言市场正经历重大整合。
  • NRF52832实战指南:基于SPI接口的SCL3300倾角传感器数据采集与滤波优化
  • STM32H7实战:告别Bootloader,用MDK实现内部Flash与QSPI Flash混合运行程序