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寻找数值最大的偶数要让数值最大需要满足两个关键点长度最长保留尽可能多的字符结尾为2必须以2结尾满足偶数要求。最优方案找到字符串中最后一个出现的’2’保留这个’2’同时保留这个’2’前面的所有字符。原因保留最后一个2能保证前面所有字符都不被丢弃字符串长度最长长度最长 → 数值一定最大结尾是2 → 满足偶数要求。步骤4处理结果格式保留最后一个2及它前面的所有字符后这个字符串就是答案。举例输入1112最后一个2是第4位保留前面所有1这个2结果就是1112二、对应代码的执行逻辑文字描述代码strings.TrimRight(s, 1)的作用从字符串的最右侧开始逐个删除字符1直到遇到第一个非1的字符也就是2就停止最终结果就是最后一个2 它前面的所有字符完全符合我们的解题逻辑。以输入1112为例字符串右侧第一个字符是2不是1所以不删除任何字符直接返回原字符串1112。三、时间复杂度 额外空间复杂度1. 总时间复杂度O(n)n 是输入字符串的长度。代码核心是TrimRight函数它需要从右向左遍历一次字符串遍历次数最多等于字符串长度整个过程只做了一次线性遍历没有嵌套循环因此时间复杂度为线性复杂度 O(n)。2. 总额外空间复杂度O(n)代码会创建并返回一个新的字符串存储结果新字符串的长度最大等于原字符串长度除了输入和输出字符串外没有使用其他额外的数据结构因此额外空间复杂度为 O(n)。总结解题核心必须以最后一个2结尾保留其前面所有字符得到最长且最大的偶数时间复杂度O(n)线性遍历额外空间复杂度O(n)存储结果字符串。Go完整代码如下packagemainimport(fmtstrings)funclargestEven(sstring)string{returnstrings.TrimRight(s,1)}funcmain(){s:1112result:largestEven(s)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-deflargest_even(s:str)-str:returns.rstrip(1)if__name____main__:s1112resultlargest_even(s)print(result)C完整代码如下#includeiostream#includestring#includealgorithmstd::stringlargestEven(conststd::strings){// 找到最后一个不是 1 的位置size_t poss.find_last_not_of(1);if(posstd::string::npos){return;// 如果全是 1返回空字符串}returns.substr(0,pos1);}intmain(){std::string s1112;std::string resultlargestEven(s);std::coutresultstd::endl;return0;}