SQL代码补全功能 | 豆包MarsCode AI 刷题

88 阅读2分钟

问题描述

在开发SQL编辑器时,实现自动补全功能是提高用户体验的重要一环。小C需要实现一个功能,根据用户输入的字符片段,快速从已知的SQL关键字和数据库相关名称中找到所有以该片段开头的候选词,并按字典序输出。

例如,当用户输入 s 时,编辑器需要自动提示以 s 开头的所有可能选项,如 select。如果用户输入 fr,则需要提示 from 和 from_mobile。如果在提示中只有一个选项符合,如输入 from_ 时只提示 from_mobile


测试样例

样例1:

输入:num = 8,data = ["select", "from", "where", "limit", "origin_log_db", "event_log_table", "user_id", "from_mobile"], input = "f"
输出:'from,from_mobile'

问题理解

你需要实现一个自动补全功能,根据用户输入的字符片段,从已知的SQL关键字和数据库相关名称中找到所有以该片段开头的候选词,并按字典序输出。

思路分析

  1. 过滤候选词:遍历列表中的每个词,检查是否以用户输入的字符片段开头.(startswith 是 Python 字符串的一个方法,用于检查字符串是否以指定的前缀开头。)
   #遍历 data 列表,检查每个词是否以 input 开头
   for word in data:
       #如果 word 以 input 开头,并且不在 candidates 列表中,将其添加到 candidates 列表中
       #避免重复添加相同词
       if word.startswith(input) and word not in candidates:
           candidates.append(word)
  1. 排序:将符合条件的候选词按字典序排序。(sort 是 Python 列表的一个方法,用于对列表中的元素进行排序。默认情况下,sort 方法会按照字典序(即字母顺序)对列表中的字符串进行排序。)

candidates.sort()

  1. 输出结果

    • 如果只有一个候选词,直接输出该词。
    • 如果有多个候选词,将它们用逗号连接后输出。
    • 如果没有符合条件的候选词,输出 -1
 #如果没有符合条件的候选词,输出 `-1`。
 if not candidates:
        return '-1'
    #如果只有一个候选词,直接输出该词;如果有多个候选词,将它们用逗号连接后输出。
    if len(candidates) == 1:
        return candidates[0]
    else:
        return ','.join(candidates)

Python代码

def solution(num, data, input):
    candidates = []
    for word in data:
        if word.startswith(input) and word not in candidates:
            candidates.append(word)
    if not candidates:
        return '-1'
    candidates.sort()
    if len(candidates) == 1:
        return candidates[0]
    else:
        return ','.join(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")
    print(solution(16, testData2, "g") == "group,group_name,group_id")
    print(solution(16, testData2, "m") == "-1")