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

求助:Hackerrank Check Strict Superset代码最后测试用例失败

问题排查与修复

核心问题分析

你的代码存在三个关键缺陷:

  • 未处理长度相等的场景:当主集合s与待检查集合a长度相同时,代码直接跳过判断。但严格超集要求s必须真包含a(即s≠a且s是a的超集),此时若s和a相等,应返回False,但你的代码会保留res=True,导致错误。
  • 错误覆盖结果值:每次执行res = s.issuperset(a)时,会直接覆盖之前的res状态。比如第一个集合不符合要求时res被设为False,但第二个集合符合时res又被改成True,最终输出错误结果。
  • 严格超集判断逻辑缺失:仅通过len(s) > len(a)加超集判断并不严谨,严格超集需要同时满足s包含a的所有元素,且s与a不相等。

修复后的代码

方案一:显式判断条件

s = set(map(int, input().split()))
n = int(input())
is_strict_superset = True

for _ in range(n):
    a = set(map(int, input().split()))
    # 严格超集需同时满足:s包含a所有元素,且s长度大于a
    if not s.issuperset(a) or len(s) <= len(a):
        is_strict_superset = False
        break  # 发现不符合项,直接终止循环

print(is_strict_superset)

方案二:利用Python集合原生比较

Python集合支持直接用>判断严格超集,等价于s包含a且s≠a,代码更简洁:

s = set(map(int, input().split()))
n = int(input())
is_strict_superset = True

for _ in range(n):
    a = set(map(int, input().split()))
    if not (s > a):
        is_strict_superset = False
        break

print(is_strict_superset)

修复逻辑说明

  1. 覆盖所有边界情况:无论是s长度小于、等于还是大于a,都能通过条件判断筛选出不符合严格超集的场景。
  2. 避免结果被覆盖:一旦发现任意一个集合不满足要求,立即将结果设为False并跳出循环,确保后续判断不会修改错误状态。
  3. 符合严格超集定义:严格遵循Hackerrank题目中对严格超集的要求——主集合必须包含待检查集合的所有元素,且两个集合不相等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:45:33