/* 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. vue.js学习记录

    vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...

  2. Java 组件化(gradle)

    组件化什么是组件化,直接看下面两张图. 上面是非组件化的项目,下面是组件化的项目. 非组件化的问题如果项目本身有多个互相不影响的模块,甚至有多人分开负责各个模块的开发时,非组件化项目的弊端就会暴露出来 ...

  3. 【玩转Eclipse】——eclipse实现代码块折叠-类似于VS中的#region……#endregion

    [玩转Eclipse]——eclipse实现代码块折叠-类似于VS中的#region……#endregion http://www.cnblogs.com/Micheal-G/articles/507 ...

  4. maven多模块tomcat启动报 NoClassDefFoundError:com/test/main/message

    maven多模块tomcat启动报 NoClassDefFoundError:com/test/main/message 扫描不到 添加子模块jar包

  5. Redis怎么做持久化

    1.redis持久化的两种方式 2.两种持久化方式区别 3.两种持久化方式的使用场景 1.Redis 是内存型数据库,一般来用作缓存.保存在内存的数据有一个特点, 就是断电消失,因此一旦 Redis ...

  6. Oracle 赋予指定用户dba权限

    指定用户赋权限 1.链接数据库地址,使用ssh登录 2.sudo -i 3.grant dba to 用户名;

  7. PC端网站微信扫码登录

    需求分析:用户通过扫描我们网页的二维码,如果已经绑定我们平台的账户,即成功进入首页,否则提示先绑定个人微信账号. 1.绑定微信账号:是通过关注微信公众号实现绑定个人微信账号.首先通过后台接口获取到ti ...

  8. vue无线滚动组件封装

    <template> <div class="scroll-wapper" :style="{height: scrollHeight + 'px'}& ...

  9. u-boot-2016.09 make编译过程分析(一)

    https://blog.csdn.net/guyongqiangx/article/details/52565493 综述 u-boot自v2014.10版本开始引入KBuild系统,Makefil ...

  10. gperftools尝试

    最近在找windows下比较好用的函数时间统计的库,听同事说gperftools是跨平台的,就下载下来尝试了一把.发现它确实实现了windows上可以调用的dll库文件(tcmalloc_minima ...