/* 1.hashtable 把每个字符串都放到hashtable中

a.排序 长度不同,长的放在前面,长度相同,字典序小的放在前面

b.不排序 遍历数组,对于每个字符串判断它的所有前缀是否都在hashtable中,如果排序的话,满足条件就返回; 不排序的话,需要遍历所有,比较长度和字典序

2.trie树 把每个字符串插入到trie树中

a.排序

b.不排序 遍历数组,查询所有前缀是否在trie树中,而且要求节点标志位为 字符串结尾标志 */

方法一 通过排序和哈希set存储字符串前缀:

class Solution {
public:
string longestWord(vector<string>& words) {
set<string> se;//从单个字母逐渐加1填充,用于next的前一个词缀是否存在的表现。
sort(words.begin(),words.end());
int len=words.size();
string res,flag;
if(len== || words[].size()==) return "";
int start=;
while(words[start].size()>){
start++;
}
flag=words[start];
for(int i=start;i<len;i++){
se.insert(flag);
//判断是否符合函数关系
//cout<<flag<<","<<res<<endl;
//cout<<words[i]<<",";
string tmp=words[i];
tmp.pop_back();
if(se.count(tmp)){ flag=words[i];
} //判断一个单元是否到达边界,并判断是否更改返回值 //cout<<flag<<" "<<res<<endl;
if(flag.size()>res.size()) res=flag;
if(words[i].size()==) flag=words[i]; }
return res;
}
};

方法二 使用字典树:

//定义字典树节点
class TrieNode{
public:
TrieNode *child[];
bool isend=false;
TrieNode(){
for(int i=;i<;i++){
child[i]=NULL;
}
}
};
//定义字典树
class Trie{
public:
TrieNode* root;
Trie(){
root=new TrieNode();
}
void insert(string words){
TrieNode *p=root;
for(auto w:words){
int i=w-'a';
if(p->child[i]==NULL) p->child[i]=new TrieNode();
p=p->child[i];
}
p->isend=true;
}
bool searchevery(string words){
TrieNode *p=root;
for(auto w:words){
int i=w-'a';
       //查询words从一个字母开始的每一个前缀是否在trie树中,不在的话return false
if(p->child[i]==NULL || p->child[i]->isend==false) return false;
p=p->child[i];
}
return true;
}
};
class Solution {
public:
string longestWord(vector<string>& words) {
string res;
Trie trie;
for(auto word:words){
trie.insert(word);
}
for(auto w:words){
if(trie.searchevery(w)&&(w.size()>res.size()||(w.size()==res.size()&&w<res)))
res=w;
}
return res; }
};

leetcode 720. 词典中最长的单词的更多相关文章

  1. Java实现 LeetCode 720 词典中最长的单词(字典树)

    720. 词典中最长的单词 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最 ...

  2. Leetcode字典树-720:词典中最长的单词

    第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...

  3. [Swift]LeetCode720. 词典中最长的单词 | Longest Word in Dictionary

    Given a list of strings words representing an English Dictionary, find the longest word in words tha ...

  4. Leetcode720.Longest Word in Dictionary词典中最长的单词

    给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无答案,则返回 ...

  5. C#LeetCode刷题之#720-词典中最长的单词(Longest Word in Dictionary)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4120 访问. 给出一个字符串数组words组成的一本英语词典.从 ...

  6. 输出字符串中最长的单词 C# 算法

    要求: 设计一个算法从一片英语文章或者英语字符串里面输出其中最长的单词. Input: string     Output: string 尽可能多的设计测试用例来测试这个算法. 考虑空间和时间复杂度 ...

  7. [leetcode]720. Longest Word in Dictionary字典中最长的单词

    b.compareTo(a) 这个函数是比较两个值得大小,如果b比a大,那么返回1 如果小,那么返回-1,相等返回0 如果比较的是字符串,那么比较字典编纂顺序,b靠前返回-1,靠后返回1 这个题的核心 ...

  8. OpenJudge就算概论-最长单词2【寻找句子内部最长的单词】

    /*===================================== 最长单词2 总时间限制: 1000ms 内存限制: 65536kB 描述 一个以'.'结尾的简单英文句子,单词之间用空格 ...

  9. JavaScript寻找最长的单词算法

    返回提供的句子中最长的单词的长度. 返回值应该是一个数字. 第一步,使用String.prototype.split()方法将字符串转换成数组 function findLongestWord(str ...

随机推荐

  1. 最长公共子序列(LCS) Medium2

    The company "21st Century Fruits" has specialized in creating new sorts of fruits by trans ...

  2. python 如何解决高并发下的库存问题??

    python 提供了2种方法解决该问题的问题:1,悲观锁:2,乐观锁 悲观锁:在查询商品储存的时候加锁 select_for_update()  在发生事务的commit或者是事务的rollback时 ...

  3. asp.net Excel导入和导出

    1.Excel数据导入到数据库中: //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表:        p ...

  4. Postgresql重安装报错The database cluster initialisation failed.

    之前安装过PostgreSQL-9.6.5,卸载后,重装PostgreSQL-9.1.3版本,报错. 清除注册表,删除postgres账户,清除垃圾后,再次安装仍然报错. 最后改变默认安装路径,神奇的 ...

  5. 七、latex中的插图

  6. mkfifo - 创建FIFO(命名管道)

    SYNOPSIS(总览) mkfifo [options] file... POSIX options(选项): [-m mode] GNU options(选项)(最短格式): [-m mode] ...

  7. 05.Linux系统-WCP知识共享平台安装部署(旗舰版)

    WCP知识共享平台部署 一.环境准备 操作系统:CentOS Linux release 7.5.1804 (Core) Java:jdk-7u79-linux-x64.tar.gz 中间件:apac ...

  8. Cobbler自动化装机

    Cobbler自动化装机 一个可以实现批量安装系统的Linxu应用程序,他可以实现同个服务器安装不同操作系统版本. 准备环境 开启两个网卡.一个仅主机模式,一个桥接模式,仅主机模式对内提供cobble ...

  9. kubernetes之三 使用kubectl在k8s上部署应用

    在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...

  10. springboot 集成oss

    集成aliyun oss 结构如下: pom.xml <dependency> <groupId>org.springframework.boot</groupId> ...