给定一个字符串数组strs,再给定2个字符串str1和str2,返回在strs中str1与str2的最小距离。如果str1或str2为null,或不在strs中,返回-1。 例如: 【数组】 {"abc", "cde", "bcd", "ac", "bcd", "ac"} 【两个字符串】 "abc", "ac" 【输出】最小距离为:3
时间: 2023-08-11 13:06:37 浏览: 112
你可以使用以下的Java代码来解决这个问题:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MinimumDistanceFinder {
public static void main(String[] args) {
String[] strs = {"abc", "cde", "bcd", "ac", "bcd", "ac"};
String str1 = "abc";
String str2 = "ac";
int minDistance = findMinDistance(strs, str1, str2);
System.out.println("最小距离为:" + minDistance);
}
public static int findMinDistance(String[] strs, String str1, String str2) {
// 创建一个HashMap来存储每个字符串在数组中的索引列表
Map<String, List<Integer>> indicesMap = new HashMap<>();
// 遍历数组,将每个字符串出现的索引添加到对应的列表中
for (int i = 0; i < strs.length; i++) {
String word = strs[i];
if (!indicesMap.containsKey(word)) {
indicesMap.put(word, new ArrayList<>());
}
indicesMap.get(word).add(i);
}
// 获取str1和str2在数组中的索引列表
List<Integer> indices1 = indicesMap.get(str1);
List<Integer> indices2 = indicesMap.get(str2);
// 如果str1或str2为null,或不在strs中,则返回-1
if (indices1 == null || indices2 == null) {
return -1;
}
int minDistance = Integer.MAX_VALUE;
// 计算最小距离
for (int i : indices1) {
for (int j : indices2) {
minDistance = Math.min(minDistance, Math.abs(i - j));
}
}
return minDistance;
}
}
```
这个程序通过使用一个HashMap来存储每个字符串在数组中出现的索引列表。然后,它找到str1和str2在数组中的索引列表,并计算它们之间的最小距离。如果str1或str2为null,或者它们不在strs中,程序将返回-1。在给定的示例中,程序将输出最小距离为3。
阅读全文