LeetCode 244. 最短单词距离 II(哈希map+set二分查找)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 暴力超时
      • 2.2 哈希表+set二分查找

1. 题目

请设计一个类,使该类的构造函数能够接收一个单词列表。
然后再实现一个方法,该方法能够分别接收两个单词 word1 和 word2,并返回列表中这两个单词之间的最短距离。
您的方法将被以不同的参数调用 多次

示例:
假设 words = ["practice", "makes", "perfect", "coding", "makes"]输入: word1 = “coding”, word2 = “practice”
输出: 3
输入: word1 = "makes", word2 = "coding"
输出: 1

注意:
你可以假设 word1 不等于 word2, 并且 word1 和 word2 都在列表里。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-word-distance-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:

LeetCode 243. 最短单词距离
LeetCode 245. 最短单词距离 III
程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)

2.1 暴力超时

11 / 12 个通过测试用例

class WordDistance {vector<string> w;
public:WordDistance(vector<string>& words) {w = words;}int shortest(string word1, string word2) {int l = -1, r = -1, mindis = INT_MAX;for(int i = 0; i < w.size(); ++i){if(w[i] == word1)l = i;if(w[i] == word2)r = i;if(l != -1 && r != -1)mindis = min(mindis, abs(l-r));}return mindis;}
};

2.2 哈希表+set二分查找

  • 创建哈希map,单词是key,其位置是set
  • 遍历其中一个单词的所有位置 i ,在另一个单词的set中二分查找 i 的前后位置
class WordDistance {unordered_map<string,set<int>> m;
public:WordDistance(vector<string>& words) {for(int i = 0; i < words.size(); ++i){m[words[i]].insert(i);}}int shortest(string word1, string word2) {int mindis = INT_MAX;for(auto i = m[word1].begin(); i != m[word1].end(); ++i){auto j = m[word2].lower_bound(*i);if(j != m[word2].end())mindis = min(mindis, abs(*j-*i));if(j != m[word2].begin())mindis = min(mindis, abs(*(--j)-*i));}return mindis;}
};

68 ms 19.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux查看指定进程占用mem,Linux查看占用mem的进程脚本

#!/bin/bash############################################################################### 脚本功能 &#xff1a; 列出正在占用mem的进程。Rss&#xff1a;物理内存Swap&#xff1a;虚拟内存#########################################################################…

从根本上解决 Infopath 2010 重复表的序号问题

经过多长期的查找资料&#xff0c;今天终于找到如何解决Infopath 重复表序号的问题&#xff0c;其实也很简单只用Xpath 语法就可以了 count(../preceding-sibling::*[local-name() "ExpensiveDetail"])1 ExpensiveDetail 是重复表的名字 转载于:https://www.cnblog…

linux怎么将进程调优到8,Linux的性能调优命令

性能调优一直是运维工程师最重要的工作之一&#xff0c;如果您所在的生产环境中遇到了系统响应速度慢&#xff0c;硬盘IO吞吐量异常&#xff0c;数据处理速度低于预期值的情况&#xff0c;又或者如CPU、内存、硬盘、网络等系统资源长期处于耗尽的状态&#xff0c;那么这篇文章将…

LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)

文章目录1. 题目2. 解题2.1 DP超时2.2 一次遍历1. 题目 给定两个字符串 s 和 t&#xff0c;判断他们的编辑距离是否为 1。 注意&#xff1a; 满足编辑距离等于 1 有三种可能的情形&#xff1a; 往 s 中插入一个字符得到 t从 s 中删除一个字符得到 t在 s 中替换一个字符得到 …

Google搜索图片时只显示第一页

用Google搜索图片时出现&#xff0c;只显示第一页&#xff0c;其他页不能显示。 Method 1:未成功。 Method 2:成功。 结果图&#xff1a; 转载于:https://www.cnblogs.com/yfl-IT/archive/2012/06/19/2555429.html

pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6

生产环境中对于部署大量的相同系统的服务器&#xff0c;如果逐台安装操作系统的话是非常浪费时间的工作&#xff0c;还好CentOS提供了无人值守安装系统的功能&#xff0c;下面就详细介绍一下配置步骤。一、配置本机的yum源因为需要安装一些软件来达到我们的目的&#xff0c;所以…

LeetCode 247. 中心对称数 II(DP)

文章目录1. 题目2. 解题1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字&#xff08;或者上下颠倒地看&#xff09;。 找到所有长度为 n 的中心对称数。 示例 : 输入: n 2 输出: ["11","69","88","96"]来…

重新排列参数

重新排列参数 重新排列参数操作可以使你重新排列方法、索引器中的参数。你将方法的参数重新排列后&#xff0c;所有使用该方法的地方都会相应调整。以下面代码为例&#xff1a; class Person{public void Print(string name, int age, bool sex){}}class Program{static void M…

linux的accept函数源码,accept函数

13.2.5 accept函数处于监听状态的服务器在获得客户机的连接请求后&#xff0c;会将其放置在等待队列中。当系统空闲时&#xff0c;将接受客户机的连接请求。接收客户机的连接请求使用accept函数&#xff0c;该函数的具体信息如表13.6所示。表13.6 accept函数头文件函数形式i…

C# WebBrower1控件提示“该文档已被修改,是否保存修改结果”解决方法 .

C# WebBrower1控件可编辑模式保存时会提示“该文档已被修改&#xff0c;是否保存修改结果”在百度查了不少方法&#xff0c;张筱祥发现一个比较实用而且非常简单的方法&#xff0c;代码如下&#xff1a;在WebBrower1的Navigating 事件中加以下代码就没有提示了。private void w…

LeetCode 251. 展开二维向量

文章目录1. 题目2. 解题1. 题目 请设计并实现一个能够展开二维向量的迭代器。该迭代器需要支持 next 和 hasNext 两种操作。、 示例&#xff1a; Vector2D iterator new Vector2D([[1,2],[3],[4]]);iterator.next(); // 返回 1 iterator.next(); // 返回 2 iterator.next();…

linux添加中文字库主线任务,Linux 添加中文字体库

背景&#xff1a;润乾报表 win上面的项目直接上传到linux 上&#xff0c;但预览&下载报表时乱码如果含有斜线的单元格或统计图的报表在网页上发布时&#xff0c;统计图或斜线单元格里的汉字会变成小方框&#xff0c;此时往往是服务器端操作系统的中文安装包没有装全&#x…

eval()解析JSON

eval()将JSON文本转换为javascript对象.如&#xff1a;var data”{‘elements’:[""{firstname:yan,lastname:tang},""{firstname:tommy,lastname:wrox}]}”; var objeval(“(“data”)”);//转换为json对象为什么要在eval这里要添加 (“(“data”)”); 呢…

LeetCode 253. 会议室 II(贪心+优先队列)

文章目录1. 题目2. 解题1. 题目 给定一个会议时间安排的数组&#xff0c;每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei)&#xff0c; 为避免会议冲突&#xff0c;同时要考虑充分利用会议室资源&#xff0c;请你计算至少需要多少间会议室&#xff0…

linux futex 进程同步,Linux的新式线程同步原语——Futex

在我的上一篇文章《本地POSIX线程库》中&#xff0c;提到了Futex一词&#xff0c;发现好多读者误以为这是我的笔误&#xff0c;将Mutex错写为Futex了。其实Futex是Linux的一种全新的线程同步原语。本文将为您解读高效的Futex。Futex是fast userspace mutex的缩写&#xff0c;意…

笨鸟学Android开发(1):HelloWorld

全程视频&#xff08;IE等浏览器中若看不到以下GIF动画&#xff0c;请下载观看&#xff09; 源代码 转载于:https://www.cnblogs.com/beta2013/archive/2012/06/28/3377298.html

LeetCode 254. 因子的组合(回溯)*

文章目录1. 题目2. 解题1. 题目 整数可以被看作是其因子的乘积。 例如&#xff1a;8 2 x 2 x 2; 2 x 4.请实现一个函数&#xff0c;该函数接收一个整数 n 并返回该整数所有的因子组合。 注意&#xff1a; 你可以假定 n 为永远为正数。 因子必须大于 1 并且小于 n。示例 1&a…

linux 设备数 of,linux下devicetree中惯用的of函数

linux下devicetree中常用的of函数从device_node中获取信息&#xff1a;int of_property_read_u8_array(const struct device_node *np, const char *propname,u8 *out_values, size_t sz);int of_property_read_u16_array(const struct device_node *np, const char *propname,…

使用架构(XSD)验证XML文件

假使说XML是一个数据库&#xff0c;那么XSD就是这个数据库的结构。由此可见&#xff0c;XSD是如此重要&#xff0c;如果没有它&#xff0c;我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢&#xff1f;那是不可能完成的任务&#xff0c;如果你将XML数据文件当作普通…

Linux无法连接远程仓库,ssh无法连接到远端Ubuntu的解决方法

ssh无法连接到远端Ubuntu的解决方法2014-10-16 0个评论 来源&#xff1a;KiteRunner的专栏近日&#xff0c;饱受无法远程登录到新安装在VMWare上的Ubuntu虚拟机&#xff0c;如今发现问题所在&#xff0c;故记录此问题的解决方案&#xff0c;以备后用。一、远程登录虚拟…