“青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI 刷题”

103 阅读4分钟

问题描述: 小C正在开发SQL编辑器,需要实现一个自动补全功能。该功能根据用户输入的字符片段,从已知的SQL关键字和数据库相关名称中找到所有以该片段开头的候选词,并按字典序输出。具体要求如下: 用户输入的片段应该与候选词的开头部分匹配。 如果没有匹配的词,返回 -1。 如果匹配的词有多个,返回按字典序排序的候选词,并用逗号分隔。 如果只有一个匹配的词,直接返回该词。 解题思路 过滤候选词:

我们需要从所有候选词中筛选出以 input 开头的词。这可以通过列表推导式和字符串的 startswith() 方法实现。 排序候选词:

筛选出符合条件的候选词后,按照字典序排序。Python 提供了内置的 sort() 方法,可以轻松实现这一点。 去重:

在返回结果之前,确保候选词去重。虽然题目描述没有明确要求,但如果有重复的词出现,应当去重。可以通过集合(set)来去重,然后转换回列表。 返回格式:

如果筛选后只有一个候选词,则直接返回该词。 如果有多个候选词,则用逗号分隔并返回。 如果没有匹配的候选词,返回 -1。 def solution(num, data, input): # 筛选出所有以 input 开头的词 candidates = [word for word in data if word.startswith(input)]

# 如果没有任何候选词,返回 -1
if not candidates:
    return '-1'

# 按字典序排序
candidates.sort()

# 去重并保持顺序
unique_candidates = []
seen = set()
for word in candidates:
    if word not in seen:
        unique_candidates.append(word)
        seen.add(word)

# 如果只有一个候选词,直接返回该词
if len(unique_candidates) == 1:
    return unique_candidates[0]

# 否则返回逗号分隔的字符串
return ','.join(unique_candidates)

if name == "main": # 测试用例 testData1 = ["select", "from", "where", "limit", "origin_log_db", "event_log_table", "user_id", "from_mobile"] testData2 = ["select", "from", "where", "limit", "group", "having", "in", "index", "inner", "insert", "like", "log_db", "log_table", "user_id", "group_name", "group_id"]

# 测试不同输入
print(solution(8, testData1, "f") == "from,from_mobile")  # f开头,返回 "from,from_mobile"
print(solution(16, testData2, "g") == "group,group_name,group_id")  # g开头,返回 "group,group_name,group_id"
print(solution(16, testData2, "m") == "-1")  # 没有m开头的候选词,返回 "-1"
print(solution(8, testData1, "or") == "origin_log_db")  # or开头,返回 "origin_log_db"
print(solution(16, testData2, "in") == "in")  # in开头,返回 "in"

新知识点总结 列表推导式: 列表推导式是一种简洁的创建列表的方式,尤其适用于从现有数据中过滤或生成新的列表。

字符串的 startswith() 方法: startswith() 方法用于判断字符串是否以指定的子串开头,是解决自动补全问题时非常有用的方法。

去重: 在许多应用场景中,我们需要处理可能重复的数据。通过 set 去重是一个高效的方式,因为集合自动排除重复元素。

字典序排序: sort() 是 Python 的内置排序函数,默认为字典序(按ASCII顺序排序),因此直接调用 sort() 就能达到按字典序排序的目的。 学习建议 学习并掌握列表推导式: 列表推导式是Python中非常强大的工具,可以用一行代码实现很多复杂的操作。熟练使用它将大大提高编程效率。

理解常用字符串操作方法: 在编程过程中,字符串的操作是非常常见的任务。掌握 startswith()、endswith()、split()、join() 等字符串方法将非常有帮助。

注重算法和数据结构的基础: 在解决实际问题时,使用合适的数据结构(如列表、集合、字典)和算法(如排序、去重、查找等)能提高代码效率和可读性。

利用AI辅助学习: 使用MarsCode等刷题平台,可以帮助你从大量题目中挑选适合自己当前水平的题目,并通过AI的提示加深对知识点的理解。 高效学习方法 定期刷题并总结: 每天定时刷题,并在刷题后总结,分析错题和难题的原因。将这些错题整理成错题集,方便复习。

结合AI与传统学习资源: 结合AI提供的解题思路、优化建议与传统的书本和视频教程,可以更全面地掌握编程和算法。特别是在遇到难题时,利用AI提示来快速解决并理解问题的本质。

阶段性回顾与自我测试: 在学习过程中,定期回顾和自我测试已学的内容,确保知识没有遗忘并且能够灵活运用。