package com.interview.flag.l; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Created_By: stefanie * Date: 15-1-8 * Time: 下午8:25 */ public class L1_WordMinDistanceInSentence { HashMap<String, List<Integer>> index = new HashMap(); public L1_WordMinDistanceInSentence(String[] sens){ for(int i = 0; i < sens.length; i++){ if(index.containsKey(sens[i])){ index.get(sens[i]).add(i); } else { List<Integer> offset = new ArrayList(); offset.add(i); index.put(sens[i], offset); } } } public int distance(String w1, String w2){ List<Integer> offset1 = index.get(w1); List<Integer> offset2 = index.get(w2); if(offset1 == null || offset2 == null) return Integer.MAX_VALUE; int minDistance = Integer.MAX_VALUE; int idx1 = 0; int idx2 = 0; while(idx1 < offset1.size() && idx2 < offset2.size()){ minDistance = Math.min(minDistance, Math.abs(offset1.get(idx1) - offset2.get(idx2))); if(offset1.get(idx1) < offset2.get(idx2)) idx1++; else idx2++; } return minDistance; } public static void main(String[] args){ String[] sens = new String[]{"the", "quick", "brown", "fox", "quick"}; L1_WordMinDistanceInSentence dict = new L1_WordMinDistanceInSentence(sens); System.out.println(dict.distance("fox","the")); //3 System.out.println(dict.distance("quick","fox")); //3 } }