/**
* 【问题】
* 数组中两个字符串的最小距离
* 给定一个字符串数组strs,在给定两个字符串str1和str2,返回在strs中str1与
* str2的最小距离,如果str1或str2为null或者不在strs中则返回-1.
* 【举例】
* strs=["1","3","3","3","2","3","l "], strl="l", str2="2", 返回2。
* strs=["CD"], str1="CD", str2="AB", 返回-1。
* 【解答】
* 从左到右遍历strs, 用变量last1记录最近一次出现的strl的位置,用变量last2
* 记录最近一次出现的str2的位置。如果遍历到strl, 那么i-last2的值就是当前的strl和左
* 边最它最近的str2之间的距离。如果遍历到str2, 那么i-lastl的值就是当前的str2和左边
* 最它最近的strl之间的距离。用变量min记录这些距离的最小值即可。
*
* @author 雪瞳
*/
public class MinDistance {
public static int minDistance(String strs[],String str1,String str2){
if (str1==null || str2==null){
return -1;
}
if (str1.equals(str2)){
return 0;
}
int last1 = -1;
int last2 = -1;
int min = Integer.MAX_VALUE;
for (int i=0;i<strs.length;i++){
if (strs[i].equals(str1)){
min = Math.min(min,last2 == -1?min:i-last2);
last1 = i;
}
if (strs[i].equals(str2)){
min = Math.min(min,last1 == -1?min:i-last1);
last2 = i;
}
}
return min == Integer.MAX_VALUE?-1:min;
}
public static void main(String[] args) {
String[] strs=new String[]{"1","3","3","3","2","3","l"};
String strl="l";
String str2="2";
int result = minDistance(strs, strl, str2);
System.out.println(result);
}
}