前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员面试金典 - 面试题 17.15. 最长单词(排序+递归)

程序员面试金典 - 面试题 17.15. 最长单词(排序+递归)

作者头像
Michael阿明
发布2020-07-13 15:40:47
6180
发布2020-07-13 15:40:47
举报

1. 题目

给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。 若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。

代码语言:javascript
复制
示例:
输入: ["cat","banana","dog","nana","walk","walker","dogwalker"]
输出: "dogwalker"
解释: "dogwalker"可由"dog"和"walker"组成。

提示:
0 <= len(words) <= 100
1 <= len(words[i]) <= 100

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-word-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 单词可重复使用
  • 先按长度降序排列,长度相等,字典序小的在前
  • 从前往后找到第一个单词即可
  • 将单词拆分成子串,递归判断子串的子串
代码语言:javascript
复制
class Solution {
public:
    string longestWord(vector<string>& words) {
        if(words.size() < 2)
            return "";
        sort(words.begin(), words.end(),[&](auto a, auto b){
        	if(a.size() == b.size())
        		return a < b;
        	return a.size() > b.size();
        });
        int i, len;
        string ans, sub;
        unordered_set<string> set;
        for(i = 0; i < words.size(); ++i)
        	set.insert(words[i]);
        for(i = 0; i < words.size()-1; ++i)
        {
        	for(len = 1; len < words[i].size(); ++len)
        	{
        		sub = words[i].substr(0,len);
        		if(set.count(sub) && ok(words[i].substr(len), set))
        			return words[i];
        	}
        }
        return "";	
    }

    bool ok(string s, unordered_set<string> &set)
    {
        if(s=="")
            return true;
    	bool good = false;
    	for(int len = 1; len <= s.size(); ++len)
    	{
    		string sub = s.substr(0,len);
    		if(set.count(sub) && ok(s.substr(len),set))
    		{
    			good = true;
    			break;
    		}
    	}
    	return good;
    }
};

48 ms 12.7 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档