Hacker Rank稀疏数组问题:Python代码过样例但多数测试用例失败求助
代码存在的问题
1. 约束判断逻辑错误
内层条件判断写错:len(queries)>= 1 and len(strings)<= 1000,这里应该判断queries的长度上限,而非重复判断strings,正确应为len(queries) >=1 and len(queries) <=1000。
此外,题目已明确输入符合约束条件,无需在函数内添加这些判断——一旦输入触发判断不成立(比如你的错误判断),count_arr会未定义,返回时直接抛出NameError,导致测试用例失败。
2. 字符串匹配逻辑错误
代码中仅对输入字符串做strip()处理,未对查询字符串做相同处理。以示例为例:查询字符串' abc'未做strip(),而输入字符串'abc'做strip()后是'abc',两者不相等,无法得到示例中的计数1。若题目要求忽略前后空格匹配,需同时对查询和输入字符串做strip();若要求精确匹配,则不该使用strip()。
3. 未覆盖所有查询场景
若某个查询字符串长度不符合你写的判断(即使题目说不会出现),该查询不会被加入count_arr,返回的结果数组长度会小于queries的长度,直接导致结果错误。
修复后的代码
def matchingStrings(strings, queries): # 先统计所有输入字符串的出现次数,提升效率 count_map = {} for s in strings: # 若要求精确匹配则用s,若要求忽略空格则用s.strip() key = s.strip() count_map[key] = count_map.get(key, 0) + 1 # 生成查询结果数组 result = [] for q in queries: # 对应上面的key处理逻辑 query_key = q.strip() result.append(count_map.get(query_key, 0)) return result
关键修复说明
- 移除不必要的约束判断:避免因判断逻辑错误导致的异常,同时简化代码。
- 优化统计逻辑:仅遍历一次输入字符串统计次数,再遍历查询数组获取结果,时间复杂度从O(n*q)降至O(n+q),效率更高。
- 修正匹配逻辑:统一处理查询和输入字符串的空格问题,确保和题目要求一致。若题目要求精确匹配,只需将
key = s.strip()和query_key = q.strip()改为key = s和query_key = q即可。
内容的提问来源于stack exchange,提问作者Nikhil Narayane
相关产品推荐
相关产品推荐

