高级农民
- 积分
- 1280
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-7-23
- 最后登录
- 1970-1-1
|
- public int shortestDistance(String[] words, String word1, String word2, String word3) {
- //preid is needed to duplicate case
- int w1_preid = -1;
- int w2_preid = -1;
- int w3_preid = -1;
-
- //curid
- int w1_id = -1;
- int w2_id = -1;
- int w3_id = -1;
-
-
- int min = Integer.MAX_VALUE;
- for (int i = 0 ; i < words.length ; i++){
-
- //update possilbe length
- //only two the same [w1, w2] , [w2, w3], [w1, w3]
- if (word1.equals(word2) && !word1.equals(word3) && words[i].equals(word3)){
- if (w1_preid != -1 && w1_id!= -1)
- min = Math.min(i- w1_preid, min);
- }
- else if (word1.equals(word3) && !word1.equals(word2) && words[i].equals(word2)){
- if (w1_preid != -1 && w1_id!= -1)
- min = Math.min(i- w1_preid, min);
- }
- else if (word2.equals(word3) && !word2.equals(word1) && words[i].equals(word1)){
- if (w2_preid != -1 && w2_id!= -1)
- min = Math.min(i- w2_preid, min);
- }
- // all the same
- // order does not matter but three different are necessary
- else if (word1.equals(word2) && word2.equals(word3) && words[i].equals(word1)){
- if (w1_preid != -1 && w1_id!= -1)
- min = Math.min(i- w1_preid, min);
- }
- // all different
- else if (words[i].equals(word1)){
- if (w2_id != -1 && w3_id!= -1)
- min = Math.min(i- Math.min(w2_id, w3_id), min);
- }
- else if (words[i].equals(word2)){
- if (w1_id != -1 && w3_id!= -1)
- min = Math.min(i- Math.min(w1_id, w3_id), min);
- }
- else if (words[i].equals(word3)){
- if (w1_id != -1 && w2_id!= -1)
- min = Math.min(i- Math.min(w1_id, w2_id), min);
- }
-
-
- //update cur index to id /preid
- if (words[i].equals(word1)){
- w1_preid = w1_id;
- w1_id = i;
- }
- if (words[i].equals(word2)){
- w2_preid = w2_id;
- w2_id = i;
- }
- if (words[i].equals(word3)){
- w3_preid = w3_id;
- w3_id = i;
- }
- }
- return min;
- }
复制代码
写了个代码considering duplication 有点complicate 有错烦指正 |
|