大数和中的极值位距离-题解.py

148 阅读2分钟

问题描述

小R面对一个问题,她有两个由数字字符组成的超大字符串数,需要求出这两个数相加后得到的字符串数中的最大数和最小数之间的位数差距。如果结果中所有数字都相同,则差距为 0。如果存在多个符合最大或最小条件的数,应该选择最小的位置差。

解题思路

  1. 字符串相加:首先将两个字符串数转换为整数,相加后再转换回字符串。
  2. 寻找最大和最小数字:遍历相加后的字符串,找到其中的最大数字和最小数字。
  3. 计算位数差距:再次遍历字符串,记录最大数字和最小数字的位置,计算它们之间的最小位数差距。

代码实现

def solution(string1, string2):
    # 将两个字符串数相加并转换为字符串
    s3 = str(int(string1) + int(string2))
    
    # 初始化最大值和最小值
    max_ = 0
    min_ = 0x3f3f3f3f3f3f3f
    
    # 找到最大和最小数字
    for i in s3:
        max_ = max(max_, int(i))
        min_ = min(min_, int(i))
    
    # 初始化答案和位置索引
    ans = 0x3f3f3f3f3f3f
    max_index = -1
    min_index = -1
    
    # 遍历字符串,计算位数差距
    for i in range(len(s3)):
        if int(s3[i]) == max_:
            if min_index != -1:
                ans = min(ans, i - min_index)
            max_index = i
        if int(s3[i]) == min_:
            if max_index != -1:
                ans = min(ans, i - max_index)
            min_index = i
    
    # 返回结果,如果差距大于0则减1,否则返回0
    return ans - 1 if ans > 0 else 0

if __name__ == "__main__":
    # 测试用例
    print(solution("111", "222") == 0)
    print(solution("111", "34") == 1)
    print(solution("5976762424003073", "6301027308640389") == 6)