问题描述
在开发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关键字和数据库相关名称中找到所有以该片段开头的候选词,并按字典序输出。
思路分析
- 过滤候选词:遍历列表中的每个词,检查是否以用户输入的字符片段开头.(
startswith是 Python 字符串的一个方法,用于检查字符串是否以指定的前缀开头。)
#遍历 data 列表,检查每个词是否以 input 开头
for word in data:
#如果 word 以 input 开头,并且不在 candidates 列表中,将其添加到 candidates 列表中
#避免重复添加相同词
if word.startswith(input) and word not in candidates:
candidates.append(word)
- 排序:将符合条件的候选词按字典序排序。(
sort是 Python 列表的一个方法,用于对列表中的元素进行排序。默认情况下,sort方法会按照字典序(即字母顺序)对列表中的字符串进行排序。)
candidates.sort()
-
输出结果:
- 如果只有一个候选词,直接输出该词。
- 如果有多个候选词,将它们用逗号连接后输出。
- 如果没有符合条件的候选词,输出
-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")