字符串问题——数组中两个字符串的最小距离

题目:给定一个字符串str,再给定两个字符串str1和str2,返回在str中str1和str2的最小距离,如果str1或str2为null,返回-1。
例:
strs=[“1”,”3”,”3”,”3”,”2”,”3”,”1”],str1=”1”,str2=”2”,返回2。
strs=[“CD”],str1=”CD”,str2=”AB”,返回-1。

实现

  1. 遍历str,用last1记录str1最近出现的位置,用last2记录str2最近出现的位置。用min记录str1和str2之间的最小距离。
  2. 如果遍历到str1,则i-last2就是str1与str2的最小距离;
    如果遍历到str2,则i-last1就是str2与str1的最小距离。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* 输出str中str1和str2字符串之间的最小距离
*/
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)) {
//如果last2还没有找到,则最小值不存在,min=Integer.MAX_VLAUE
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; //为了显示当不存在最小距离时返回-1
}
//Test
public static void main(String[] args) {
String[] strs = {"1","3","3","3","2","3","1"};
String str1 = "1";
String str2 = "2";
System.out.println(minDistance(strs, str1, str2));
String[] strs1 = {"CD"};
String str3 = "CD";
String str4 = "AB";
System.out.println(minDistance(strs1, str3, str4));
}
}