def add_large_numbers(num1: str, num2: str) -> str:
"""实现大数加法"""
max_len = max(len(num1), len(num2))
num1 = num1.zfill(max_len)
num2 = num2.zfill(max_len)
carry = 0
result = []
for i in range(max_len - 1, -1, -1):
digit_sum = int(num1[i]) + int(num2[i]) + carry
carry = digit_sum // 10
result.append(str(digit_sum % 10))
if carry:
result.append(str(carry))
return ''.join(result[::-1])
def find_min_distance(sum_str: str) -> int:
"""在结果字符串中找出最大值和最小值的最小位置差"""
if len(set(sum_str)) == 1:
return 0
max_digit = max(sum_str)
min_digit = min(sum_str)
last_pos = {}
min_distance = len(sum_str)
for i, digit in enumerate(sum_str):
if digit == max_digit or digit == min_digit:
for prev_digit, prev_pos in last_pos.items():
if (digit == max_digit and prev_digit == min_digit) or \
(digit == min_digit and prev_digit == max_digit):
min_distance = min(min_distance, i - prev_pos)
last_pos[digit] = i
return min_distance - 1 if min_distance != len(sum_str) else min_distance
def solution(string1: str, string2: str) -> int:
"""主函数:计算两个大数相加后的最大最小值位置差"""
sum_result = add_large_numbers(string1, string2)
return find_min_distance(sum_result)
if __name__ == "__main__":
print(solution("111", "222") == 0)
print(solution("111", "34") == 1)
print(solution("999", "1") == 0)
print(solution("525", "474") == 0)
print(solution("5976762424003073", "6301027308640389") == 6)
print(solution("99", "1") == 0)
print(solution("555", "444") == 0)