You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python面试题:如何按规则移除数字字符串中的相同数字对返回结果?

Python数字字符串对战功能实现

题目规则回顾

对于仅由数字组成的字符串,从左侧开始将相邻数字两两配对进行「对战」,数值更大的数字获胜;若两个数字相同则二者都被淘汰,未完成配对的单个数字自动获胜。返回所有获胜数字拼接的字符串;若所有数字都被淘汰,返回'total carnage'。

现有代码问题说明

你当前实现的hasSameDigits是全局检测数字是否存在重复值,和题目要求的「相邻两两配对处理」逻辑完全不匹配,无法直接基于该代码迭代,需要重新实现核心逻辑。

实现思路

  • 遍历输入字符串,按顺序每2个字符为一组拆分,若字符串长度为奇数,最后1个字符单独为一组
  • 逐组处理:
    • 组长度为2时:比较两个数字的大小,仅保留更大的数字;若两数相等则都不保留
    • 组长度为1时:直接保留该数字
  • 最终如果保留的结果为空,返回'total carnage',否则返回拼接后的结果字符串

完整实现代码

def battle_digits(s):
    res = []
    n = len(s)
    # 步进为2遍历,每次取一组
    for i in range(0, n, 2):
        # 处理最后只剩一个数字的情况
        if i == n - 1:
            res.append(s[i])
            continue
        a = int(s[i])
        b = int(s[i+1])
        if a > b:
            res.append(str(a))
        elif b > a:
            res.append(str(b))
        # 相等的情况什么都不添加,即两者都淘汰
    if not res:
        # 如需匹配示例2的首字母大写格式,可修改为返回'Total Carnage'
        return 'total carnage'
    return ''.join(res)

# 测试示例
print(battle_digits("578921445")) # 输出 7925
print(battle_digits("778899")) # 输出 total carnage

内容的提问来源于stack exchange,提问作者anish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:01