leetcode 720. 词典中最长的单词

/* 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. 词典中最长的单词的更多相关文章
- Java实现 LeetCode 720 词典中最长的单词(字典树)
720. 词典中最长的单词 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最 ...
- Leetcode字典树-720:词典中最长的单词
第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...
- [Swift]LeetCode720. 词典中最长的单词 | Longest Word in Dictionary
Given a list of strings words representing an English Dictionary, find the longest word in words tha ...
- Leetcode720.Longest Word in Dictionary词典中最长的单词
给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无答案,则返回 ...
- C#LeetCode刷题之#720-词典中最长的单词(Longest Word in Dictionary)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4120 访问. 给出一个字符串数组words组成的一本英语词典.从 ...
- 输出字符串中最长的单词 C# 算法
要求: 设计一个算法从一片英语文章或者英语字符串里面输出其中最长的单词. Input: string Output: string 尽可能多的设计测试用例来测试这个算法. 考虑空间和时间复杂度 ...
- [leetcode]720. Longest Word in Dictionary字典中最长的单词
b.compareTo(a) 这个函数是比较两个值得大小,如果b比a大,那么返回1 如果小,那么返回-1,相等返回0 如果比较的是字符串,那么比较字典编纂顺序,b靠前返回-1,靠后返回1 这个题的核心 ...
- OpenJudge就算概论-最长单词2【寻找句子内部最长的单词】
/*===================================== 最长单词2 总时间限制: 1000ms 内存限制: 65536kB 描述 一个以'.'结尾的简单英文句子,单词之间用空格 ...
- JavaScript寻找最长的单词算法
返回提供的句子中最长的单词的长度. 返回值应该是一个数字. 第一步,使用String.prototype.split()方法将字符串转换成数组 function findLongestWord(str ...
随机推荐
- MySQL explain,Extra分析(转)
explain结果中有一个Extra字段,对分析与优化SQL有很大的帮助 数据准备: create table user ( id int primary key, name varchar(20), ...
- Django 调试models 输出的SQL语句 定位查看结果
django 调试models变得更为简单了,不用像之前的版本, 手工去调用django query, 才能打印出之前的代码是执行的什么SQL语句. 1.3开始只需在settings.py里,配置如下 ...
- 字符串hash 模板
typedef long long ll; typedef unsigned long long ull; #define maxn 1005 struct My_Hash { ull ; ull p ...
- 【源码解读】cycleGAN(一):网络
源码地址:https://github.com/aitorzip/PyTorch-CycleGAN 如图所示,cycleGAN的网络结构包括两个生成器G(X->Y)和F(Y->X),两个判 ...
- “百度杯”CTF比赛 十一月场--CrackMe01
测试文件:https://static2.ichunqiu.com/icq/resources/fileupload/CTF/BSRC/BSRC-11-3/CrackMe01_97D2BF0DBD2E ...
- 使用Python发送企业微信消息
准备工作: 到企业微信官网,注册一个企业:登录企业微信后台,创建一个“自建”应用, 获取企业ID.agentid.secret这3个必要的参数:在企业微信的通讯录中,创建多个测试账号:在手机端安装“企 ...
- fastadmin 搭建到云虚拟主机
1.把public下的index.php.router.php.install.php.admin_*******.php..htaccess(伪静态文件),移到 文件夹:/htdocs 根目录 ...
- 2018微信小程序开发遇到的坑
第一个坑:wx.showModal(OBJECT) wx.showModal在安卓手机里,如果点击遮罩的话会关闭弹窗,不会有任何回调.而苹果的情况下则是点击遮罩不会有任何反应. 这样会有什么问题呢? ...
- linux下实现web数据同步的四种方式(性能比较)
实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享2.rsync +inotify实现web数据同步3.rsyn ...
- H5 FormData对象
FormData对象 2018年01月08日 14:31:53 阅读数:2635 FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台. 在使用aj ...