目录
数组中两个字符串的最小距离
牛客:题目链接
题目描述
给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。
算法原理
从题目中可以分析出来,要求在两个字符串中的最小距离,我们很简单的办法就是暴力枚举,定义i和j指针,寻找可能的结果,那我们能不能用双指针来做优化呢?因为我们从暴力枚举中可以发现我们的j指针不用每次都回去,所以我们可以用双指针来解决问题,用pre和cut来记录两个字符串在字符串数组中的位置并进行判断
题目代码
import java.util.Scanner;
public class test2 {
// 一组字符串数组,输入两个字符串,求它们在字符串数组中的最小距离
// 算法原理: 贪心和双指针
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str1 = scanner.next();
String str2 = scanner.next();
// 记录str1和str2是否出现过
int pre = -1, cut = -1;
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
// 输入一个后就进行判断
String s = scanner.nextLine();
if (s.equals(str1)) {
// 出现一次就更新pre的值
pre = i;
// 判断是否出现str2
if (cut != -1) {
min = Math.min(Math.abs(pre - cut), min);
}
}
if (s.equals(str2)) {
cut = i;
if (pre != -1) {
min = Math.min(Math.abs(pre - cut), min);
}
}
}
// min没变化就证明没有最小距离
if (min == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(min);
}
}
}