返回介绍

Longest Words

发布于 2025-02-22 13:01:34 字数 1736 浏览 0 评论 0 收藏 0

Source

Given a dictionary, find all of the longest words in the dictionary.

Example
Given

{
  "dog",
  "google",
  "facebook",
  "internationalization",
  "blabla"
}
the longest words are(is) ["internationalization"].

Given

{
  "like",
  "love",
  "hate",
  "yes"
}
the longest words are ["like", "love", "hate"].

Challenge
It's easy to solve it in two passes, can you do it in one pass?

题解

简单题,容易想到的是首先遍历以便,找到最长的字符串,第二次遍历时取最长的放到最终结果中。但是如果只能进行一次遍历呢?一次遍历意味着需要维护当前遍历的最长字符串,这必然有比较与更新删除操作,这种情况下使用双端队列最为合适,这道题稍微特殊一点,不必从尾端插入,只需在遍历时若发现比数组中最长的元素还长时删除整个列表。

Java

class Solution {
  /**
   * @param dictionary: an array of strings
   * @return: an arraylist of strings
   */
  ArrayList<String> longestWords(String[] dictionary) {
    ArrayList<String> result = new ArrayList<String>();
    if (dictionary == null || dictionary.length == 0) return result;

    for (String str : dictionary) {
      // combine empty and shorter length
      if (result.isEmpty() || str.length() > result.get(0).length()) {
        result.clear();
        result.add(str);
      } else if (str.length() == result.get(0).length()) {
        result.add(str);
      }
    }

    return result;
  }
}

源码分析

熟悉变长数组的常用操作。

复杂度分析

时间复杂度 O(n)O(n)O(n), 最坏情况下需要保存 n - 1 个字符串,空间复杂度 O(n)O(n)O(n).

Reference

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文