贪心:
选取走最大步数的代理服务器,依次循环,由于第一次切换代理服务器不算开销,最后结果减一即可。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
HashMap<String, Boolean> hashMap = new HashMap<>();
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
hashMap.put(scanner.next(), true);
}
int m = scanner.nextInt();
String[] b = new String[m];
for (int i = 0; i < m; i++) {
b[i] = scanner.next();
}
int count = 0;
int i = 0;
while (i < b.length) {
int maxStep = getMaxStep(b, i, hashMap);
if (maxStep == 0) {
count = 0;
break;
}
i += maxStep;
count++;
}
System.out.println(count-1);
}
}
private static int getMaxStep(String[] b, int start, HashMap<String, Boolean> hashMap) {
int i = start;
for (; i < b.length; i++) {
if (hashMap.containsKey(b[i])) {
hashMap.put(b[i], false);
}
if (allFalse(hashMap)) {
reset(hashMap);
return i - start;
}
}
return i - start;
}
private static void reset(HashMap<String, Boolean> hashMap) {
for (Map.Entry<String, Boolean> entry : hashMap.entrySet()) {
hashMap.put(entry.getKey(), true);
}
}
private static boolean allFalse(HashMap<String, Boolean> hashMap) {
for (Map.Entry<String, Boolean> entry : hashMap.entrySet()) {
if (entry.getValue()) {
return false;
}
}
return true;
}
}