720. 词典中最长的单词
词典中最长的单词
题目描述:
给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。
若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
示例 1:
输入:words = [“w”,”wo”,”wor”,”worl”, “world”]
输出:”world”
解释: 单词”world”可由”w”, “wo”, “wor”, 和 “worl”逐步添加一个字母组成。
示例 2:
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]
输出:”apple”
解释:”apply” 和 “apple” 都能由词典中的单词组成。但是 “apple” 的字典序小于 “apply”
思路:
时间复杂度n,空间复杂度n
先排序,使用map,判断前一个字符串在不在map里面,如果在就把这个也放进map。
代码:
func longestWord(words []string) string {
sort.Strings(words)
n := len(words)
res := ""
mp := make(map[string]int, 0)
for i:=0;i<n;i++{
if len(words[i]) == 1{
if len(res)< len(words[i]){
res = words[i]
}
mp[words[i]] = 1
} else{
if mp[words[i][:len(words[i])-1]] == 1{
if len(res) < len(words[i]){
res = words[i]
}
mp[words[i]] = 1
}
}
}
return res
}
代码效率:
执行用时:12 ms, 在所有 Go 提交中击败了82.88%的用户
内存消耗:6.4 MB, 在所有 Go 提交中击败了90.99%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!