244. Shortest Word Distance II

本文介绍了一种名为WordDistance的实现方式,该方法通过构建一个哈希映射来存储单词及其在数组中的位置列表,进而高效地计算任意两个单词在数组中最近的距离。文章还提出了一种优化策略,即在寻找最小距离时只需移动位置较小的指针。

这几题都挺没意思的,建一个hashMap,里面存放出现过的位置的list

short稍微有点讲究,就是不要两个都重头找一遍,每次只移动小的那个

 

 1 public class WordDistance {
 2     Map<String, List<Integer>> map;
 3 
 4     public WordDistance(String[] words) {
 5         map = new HashMap<String, List<Integer>>();
 6         for(int i = 0; i < words.length; i++) {
 7             if(map.containsKey(words[i])) {
 8                 List<Integer> cur = map.get(words[i]);
 9                 cur.add(i);
10                 map.put(words[i], cur);
11             } else {
12                 List<Integer> cur = new ArrayList<Integer>();
13                 cur.add(i);
14                 map.put(words[i], cur);
15             }
16         }
17     }
18 
19     public int shortest(String word1, String word2) {
20         List<Integer> list1 = map.get(word1);
21         List<Integer> list2 = map.get(word2);
22         int i = 0; 
23         int j = 0;
24         int min = Integer.MAX_VALUE;
25         while(i < list1.size() && j < list2.size()) {
26             min = Math.min(min, Math.abs(list1.get(i) - list2.get(j)));
27             if(list1.get(i) < list2.get(j)) {
28                 i++;
29             } else {
30                 j++;
31             }
32         } 
33         return min;
34     }
35 }
36 
37 // Your WordDistance object will be instantiated and called as such:
38 // WordDistance wordDistance = new WordDistance(words);
39 // wordDistance.shortest("word1", "word2");
40 // wordDistance.shortest("anotherWord1", "anotherWord2");

 

转载于:https://www.cnblogs.com/warmland/p/5720125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值