每日一题 为了工作 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); } }
标签:strs,str2,str1,0418,last2,int,第四十七,2020,strl 来源: https://www.cnblogs.com/walxt/p/12725409.html