/* 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. redis的线程模型 与 压力测试

    当客户端与ServerSocket产生连接时,会产生一个 AE_REABLE / AE_WRITABL 事件, 多个Socket可能并发产生不同的事件,IO多路复用程序会监听这些Socket,按照顺序 ...

  2. jQuery之操作样式的css方法

    注意点都在代码里 <style> div { width: 200px; height: 200px; background-color: pink; } </style> & ...

  3. 2019-11-22-Roslyn-在多开发框架让-msbuild-的-Target-仅运行一次

    title author date CreateTime categories Roslyn 在多开发框架让 msbuild 的 Target 仅运行一次 lindexi 2019-11-22 09: ...

  4. js emoji 过滤

    function filteremoji(emojireg){ var ranges = [ '\ud83c[\udf00-\udfff]', '\ud83d[\udc00-\ude4f]', '\u ...

  5. 几个有关FPGA的概念

    <数字设计——原理和实践>(John F.Wakerly)的书 FPGA同步时钟设计 简单说就是 一个系统中(或系统中的一部分)都采用同一个时钟触发.系统中的(D)触发器全部都连接到一个时 ...

  6. ifconfig-push

    ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点.它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于 ...

  7. git上拉项目

  8. bzoj4883 [Lydsy1705月赛]棋盘上的守卫 最小生成基环树森林

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4883 题解 每一行和每一列都必须要被覆盖. 考虑对于每一行和每一列都建立一个点,一行和一列之间 ...

  9. TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了

    2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...

  10. 如何保证Redis与数据库的数据一致性

    一般来说,只要你用到了缓存,不管是Redis还是memcache,就可能会涉及到数据库缓存与数据的一致性问题,这里我们以Redis为例. 我们该如何保证Redis与数据库的一致性呢? So easy: ...