返回
LeetCode 2306:Python 为一家公司命名
后端
2023-12-29 13:58:25
问题
给你一个字符串 names
,它由若干个用空格分隔的单词组成。你的任务是为一家公司命名。公司名称由一个或多个单词组成,且每个单词都必须是 names
中的一个单词。公司名称不能使用相同的单词两次。
返回字典序最小的公司名称。如果存在多个字典序最小的公司名称,那么你可以返回其中任意一个。
示例
示例 1:
输入:names = "bob alice john"
输出:"alice bob"
示例 2:
输入:names = "john john john alice bob"
输出:"alice bob"
示例 3:
输入:names = "alice bob john john bob"
输出:"alice bob"
示例 4:
输入:names = "alex jack paul george rachel"
输出:"alex george jack paul rachel"
思路分析
这道题的核心是找到字典序最小的公司名称。我们可以使用集合来解决这个问题。
- 首先,我们将字符串
names
中的单词放入一个集合中。 - 然后,我们将集合中的单词进行排序,以获得字典序最小的单词序列。
- 最后,我们将排序后的单词序列连接起来,得到字典序最小的公司名称。
Python 代码实现
def smallest_company_name(names):
"""
:type names: str
:rtype: str
"""
# 将字符串中的单词放入集合中
words = set(names.split())
# 将集合中的单词排序
sorted_words = sorted(words)
# 将排序后的单词序列连接起来
company_name = " ".join(sorted_words)
return company_name
# 测试代码
names1 = "bob alice john"
print(smallest_company_name(names1)) # "alice bob"
names2 = "john john john alice bob"
print(smallest_company_name(names2)) # "alice bob"
names3 = "alice bob john john bob"
print(smallest_company_name(names3)) # "alice bob"
names4 = "alex jack paul george rachel"
print(smallest_company_name(names4)) # "alex george jack paul rachel"
复杂度分析
-
时间复杂度:
- 将字符串中的单词放入集合中:
O(n)
,其中n
是字符串中的单词数量。 - 将集合中的单词排序:
O(n log n)
。 - 将排序后的单词序列连接起来:
O(n)
。
总时间复杂度为:
O(n log n)
。 - 将字符串中的单词放入集合中:
-
空间复杂度:
- 集合:
O(n)
。 - 排序后的单词序列:
O(n)
。
总空间复杂度为:
O(n)
。 - 集合:
总结
这道题考查的是集合的灵活应用。我们使用集合来存储字符串中的单词,并对集合中的单词进行排序,以获得字典序最小的单词序列。最后,我们将排序后的单词序列连接起来,得到字典序最小的公司名称。