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
相关产品推荐
相关产品推荐

