每日一题 为了工作 2020 0418 第四十七题

/**
 * 【问题】
 *      数组中两个字符串的最小距离
 *      给定一个字符串数组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);
    }
}

  

原文地址:https://www.cnblogs.com/walxt/p/12725409.html