python-leetcode-2259. 移除指定数字得到的最大结果

在字符串操作的面试题或算法题中,经常会遇到“删除一个字符”或“构造最大/最小数字”之类的要求。这类问题不仅考察对字符串的理解能力,还非常依赖对数字大小比较逻辑的敏感度。

今天我们来聊一道看似简单但实际上颇有技巧的字符串处理题:

给你一个表示某个正整数的字符串 number 和一个字符 digit
请你从 number恰好移除一个等于 digit 的字符,使得剩下的字符串表示的十进制数最大,并返回这个结果。
输入保证 digit 至少在 number 中出现一次。


🧠 初步思考:暴力删除是否可行?

最直接想到的办法就是:
“既然要删除一个 digit,那就遍历字符串,把每个等于 digit 的字符都删一遍,然后对所有结果取一个最大的。”

伪代码:

candidates = []
for i in range(len(number)):
    if number[i] == digit:
        candidate = number[:i] + number[i+1:]
        candidates.append(candidate)

return max(candidates)

这个方法正确但效率不高。如果字符串很长,比如 10^5 级别,每次构造新字符串都会产生较高的开销,不利于时间复杂度优化。

有没有一次遍历就能搞定的办法呢?当然有!


✅ 最优解法:贪心策略

我们可以使用贪心思想
从左到右寻找一个“合适”的 digit,当我们发现它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值