小苯的子串删除【Python实现】

360影视 动漫周边 2025-05-30 15:17 2

摘要:n = int(input)s = input.striptotal_sum = sum(int(c) for c in s)target = total_sum % 3prefix_sum = [0] * (n + 1)for i in range(1, n

n = int(input)s = input.striptotal_sum = sum(int(c) for c in s)target = total_sum % 3prefix_sum = [0] * (n + 1)for i in range(1, n+1): prefix_sum[i] = prefix_sum[i-1] + int(s[i-1])from collections import defaultdictremainder_map = defaultdict(int)remainder_map[0] = 1 # 前缀和为0的情况res = 0for r in range(1, n+1): current_remainder = prefix_sum[r] % 3 # 寻找满足 (prefix_sum[r] - prefix_sum[l-1]) % 3 == target 的l required_remainder = (current_remainder - target) % 3 res += remainder_map.get(required_remainder, 0) remainder_map[current_remainder] += 1# 加上不删除的情况(如果本身就是3的倍数)if target == 0: res += 1print(res)

来源:凌菲教育

相关推荐