当前位置:网站首页>Leetcode: Shortest Word Distance II
Leetcode: Shortest Word Distance II
2022-07-05 14:46:00 【全栈程序员站长】
This is a follow up of Shortest Word Distance. The only difference is now you are given the list of words and your method will be called repeatedly many times with different parameters. How would you optimize it?
Design a class which receives a list of words in the constructor, and implements a method that takes two words word1 and word2 and return the shortest distance between these two words in the list.
For example,
Assume that words = ["practice", "makes", "perfect", "coding", "makes"].
Given word1 = “coding”, word2 = “practice”, return 3.
Given word1 = "makes", word2 = "coding", return 1.
Note:
You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.哈希表法
复杂度
时间 O(N) 空间 O(N)
思路
因为会多次调用,我们不能每次调用的时候再把这两个单词的下标找出来。我们可以用一个哈希表,在传入字符串数组时,使用HashMap来储存word以及word在Array里面出现的index。这样当调用最短距离的方法时,我们只要遍历两个单词的下标列表就行了。具体的比较方法,则类似merge two list,每次比较两个list最小的两个值,得到一个差值。然后把较小的那个给去掉。因为我们遍历输入数组时是从前往后的,所以下标列表也是有序的。
1 public class WordDistance {
2
3 HashMap<String, ArrayList<Integer>> map;
4
5 public WordDistance(String[] words) {
6 this.map = new HashMap<String, ArrayList<Integer>>();
7 for (int i=0; i<words.length; i++) {
8 String item = words[i];
9 if (map.containsKey(item)) {
10 map.get(item).add(i);
11 }
12 else {
13 ArrayList<Integer> list = new ArrayList<Integer>();
14 list.add(i);
15 map.put(item, list);
16 }
17 }
18 }
19
20 public int shortest(String word1, String word2) {
21 ArrayList<Integer> l1 = map.get(word1);
22 ArrayList<Integer> l2 = map.get(word2);
23 int minDis = Integer.MAX_VALUE;
24 int i=0, j=0;
25 while (i<l1.size() && j<l2.size()) {
26 int p1 = l1.get(i);
27 int p2 = l2.get(j);
28 minDis = Math.min(minDis, Math.abs(p1-p2));
29 if (p1 < p2) i++;
30 else j++;
31 }
32 return minDis;
33 }
34 }
35
36 // Your WordDistance object will be instantiated and called as such:
37 // WordDistance wordDistance = new WordDistance(words);
38 // wordDistance.shortest("word1", "word2");
39 // wordDistance.shortest("anotherWord1", "anotherWord2");发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109200.html原文链接:https://javaforall.cn
边栏推荐
- Topology可视化绘图引擎
- Long list optimized virtual scrolling
- How to open an account of qiniu securities? Is it safe to open an account?
- 安装配置Jenkins
- 漫画:优秀的程序员具备哪些属性?
- Photoshop plug-in action related concepts actionlist actiondescriptor actionlist action execution load call delete PS plug-in development
- Is it OK to open the securities account on the excavation finance? Is it safe?
- Detailed explanation of usememo, memo, useref and other relevant hooks
- 729. My schedule I: "simulation" & "line segment tree (dynamic open point) &" block + bit operation (bucket Division) "
- Penetration testing methodology
猜你喜欢

【华为机试真题详解】字符统计及重排

快消品行业SaaS多租户解决方案,构建全产业链数字化营销竞争力

729. My schedule I: "simulation" & "line segment tree (dynamic open point) &" block + bit operation (bucket Division) "

Mongdb learning notes

Two Bi development, more than 3000 reports? How to do it?

两个BI开发,3000多张报表?如何做的到?

Thymeleaf th:classappend attribute append th:styleappend style append th:data- custom attribute

Security analysis of Web Architecture

Interview shock 62: what are the precautions for group by?

CPU design related notes
随机推荐
webRTC SDP mslabel lable
Run faster with go: use golang to serve machine learning
Online electronic component purchasing Mall: break the problem of information asymmetry in the purchasing process, and enable enterprises to effectively coordinate management
PHP - fatal error: allowed memory size of 314572800 bytes exhausted
网上电子元器件采购商城:打破采购环节信息不对称难题,赋能企业高效协同管理
[detailed explanation of Huawei machine test] happy weekend
机器学习框架简述
Principle and performance analysis of lepton lossless compression
【華為機試真題詳解】歡樂的周末
申请代码签名证书时如何选择合适的证书品牌?
微帧科技荣获全球云计算大会“云鼎奖”!
机器学习笔记 - 灰狼优化
有一个强大又好看的,赛过Typora,阿里开发的语雀编辑器
通过npm 或者 yarn安装依赖时 报错 出现乱码解决方式
漫画:优秀的程序员具备哪些属性?
[C question set] of Ⅷ
Matrix chain multiplication dynamic programming example
dynamic programming
超级哇塞的快排,你值得学会!
729. My schedule I: "simulation" & "line segment tree (dynamic open point) &" block + bit operation (bucket Division) "