题目来源:LintCode
原题地址:http://www.lintcode.com/zh-cn/problem/longest-words/
题目:

给一个词典,找出其中所有最长的单词。

您在真实的面试中是否遇到过这个题?

Yes
样例

在词典

{"dog","google","facebook","internationalization","blabla"
}

中, 最长的单词集合为 ["internationalization"]

在词典

{"like","love","hate","yes"
}

中,最长的单词集合为 ["like", "love", "hate"]

难度级别:
容易

思路分析:
其实如果这个题目采用两次遍历数组的话,就没有什么挑战性,很容易就能解的。
是否能够一次遍历就能够解决这个问题呢?
我想是可以的。
我所采取的手段是借用栈这个数据结构。栈有着先入后出的特点。
字符串是否放入栈中,我所采用的标准是,判断此字符串是否比当前栈中最长的字符串长度要长,如果是则更新这个最长值,并将此字符串放入栈中;
如果是等于,也放入栈中,但是长度不更新;如果是小于则不放入栈中。
根据这个策略进行一次循环之后,很容易就可以看出,此时的栈中最上面的字符串必然是原数组中字符串最长的字符串或者是之一。
因此取出最长的这些字符串就可以得到答案。

实现代码:

#include <iostream>
#include <vector>
#include <string>
#include <stack>using namespace std;class Solution
{
public:/*** @param dictionary: a vector of strings* @return: a vector of strings*/vector<string> longestWords(vector<string> &dictionary){vector<string> result;if (dictionary.empty()){return result;}stack<string> strStack;int maxLen = 0;for (int i = 0; i < dictionary.size(); i++){if (dictionary[i].size() >= maxLen){strStack.push(dictionary[i]);maxLen = dictionary[i].size();}}while (!strStack.empty()){if (strStack.top().size() == maxLen){result.push_back(strStack.top());strStack.pop();} else{break;}}return result;}
};

代码说明:
实现代码中的maxLen是用来存放当前栈中最长字符串的长度值的,初始值为0。
此代码得到的结果,若存在多个字符串长度均为并列最长,此时序列并非与字典序相同,而是恰好相反(这是使用了栈数据结构的原因)。
如果题目有要求,则需要再进行一次翻转操作。
因为本题没有要求,因此我就没有进行此操作。

最长单词(LintCode)相关推荐

  1. 关于JS阶乘,首字母大写,最长单词计算,重复说话次数等简单基础算法练习...

    (1)阶乘问题. <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  2. c语言题目集-田队写长单词

    田队是一个强迫症晚期的大神,她特别反感长单词,就像 "localization" 和"internationalization" . 于是睿智的田队想出了一个方 ...

  3. OpenJudge计算概论-最长单词2

    /*======================================================================== 最长单词2 总时间限制: 1000ms 内存限制: ...

  4. 524. 通过删除字母匹配到字典里最长单词

    524. 通过删除字母匹配到字典里最长单词 给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到. 如果答案不 ...

  5. leetcode面试题 17.15. 最长单词

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

  6. JAVA中返回值为字母时_LeetCode#524通过删除字母匹配到字典里最长单词-java中CompareTo方法用法以及Comparator中Compare方法返回值...

    import java.util.Collections; import java.util.Comparator; import java.util.List; /* 524. 通过删除字母匹配到字 ...

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

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

  8. 信息学奥赛一本通 1149:最长单词2 | OpenJudge NOI 1.13 16

    [题目链接] ybt 1149:最长单词2 OpenJudge NOI 1.13 16:最长单词2 [题目考点] 1. 字符串遍历 2. 处理多个字符串 3. while(cin >> - ...

  9. 信息学奥赛一本通(1149:最长单词2)

    1149:最长单词2 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 16328     通过数: 8906 [题目描述] 一个以'.'结尾的简单英文句子,单词之间 ...

  10. 最长单词(信息学奥赛一本通-T1149)

    [题目描述] 一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式. [输入] 一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊 ...

最新文章

  1. 【Alertmanager】腾讯企业邮箱配置
  2. oracle数据库视图存放位置,oracle数据库审计
  3. CDN调试—Debug Headers
  4. 如果表不存在则创建_当创建一个文件的时候,操作系统发生了什么
  5. linux下查看硬盘信息、硬盘分区、格式化、挂载、及swap分区
  6. 通过url传参实现多个页面使用同一个页面,再返回本页面
  7. 单位元转换万元怎么转_PDF转CAD怎么转换
  8. C#基础之--线程、任务和同步:一、异步委托
  9. js调用摄像头麦克风,截取摄像头图像 js调用摄像头录像保存本地
  10. Windows系统好用的文本编辑器
  11. VLAN中tagged与untagged的处理
  12. 版本Android型号vivo 6D版,vivox6d和x6a参数
  13. VB6.0连接Oracle中文乱码
  14. Unity 使用 iTween
  15. vs2012 +WP8sdk 开发WP8应用
  16. android内置sd卡挂载过程,Android获取机身存储、内置SD卡与外置TF卡路径
  17. CF 1129 A,B
  18. 【其他】对数转换的作用
  19. IDEA系列新手上路(作者使用经历,长篇预警)
  20. Redis安装教程(Windows版)

热门文章

  1. tbf格式用什么打开_TBF的完整形式是什么?
  2. 微信公众号自定义菜单如何添加特殊符号?
  3. Debian 下安装中文语言包和中文输入法
  4. 虾皮shopee跨境电商靠谱吗
  5. 计算机图形学之二维平移旋转缩放代码
  6. 基于Qt的ui图形化界面进行的界面设计
  7. 鞍部在哪里_观山指南!喜马拉雅9座8000米高峰在哪儿看?
  8. android中读取svg文件,Android如何加载SVG格式的矢量图
  9. 如何上传到GitHub的main分支而不是master分支
  10. python的一些技巧操作,提高编码效率