package 字符串;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class 最短摘要_尺取法 {
public static void main(String[] args) {
String[] strArrays = { "a", "b", "c", "seed", "h", "e", "f", "c", "c", "seed", "e", "f", "seed", "c" };
String[] keyArray = { "c","seed","c","c" };
solve(strArrays, keyArray);
}
private static void solve(String[] strArrays, String[] keyArray) {
int begin = -1;
int end = -1;
int len = Integer.MAX_VALUE;
int p = -1;
for (int i = 0; i < strArrays.length; i++) {
if (find(strArrays[i], keyArray) != -1) {
int j;
if (p != -1) {
j = p;
} else {
j = i + 1;
}
for (; j < strArrays.length; j++) {
if (find(strArrays[j], keyArray) != -1) {
if (containtAll(strArrays, keyArray, i, j)) {
if (j - i + 1 < len) {
len = j - i + 1;
begin = i;
end = j;
}
break;
}
}
}
}
}
print(strArrays, begin, end);
}
private static void print(String[] strArrays, int begin, int end) {
System.out.println(begin+" "+end);
for (int i = begin; i <= end; i++) {
System.out.print(strArrays[i] + " ");
}
}
private static boolean containtAll(String[] strArrays, String[] keyArray, int begin, int end) {
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < keyArray.length; i++) {
if (map.get(keyArray[i]) == null) {
map.put(keyArray[i], 1);
} else {
map.put(keyArray[i], map.get(keyArray[i]) + 1);
}
}
Map<String, Integer> mapRecord = new HashMap<>();
for (int i = begin; i <= end; i++) {
if (mapRecord.get(strArrays[i]) == null) {
mapRecord.put(strArrays[i], 1);
} else {
mapRecord.put(strArrays[i], mapRecord.get(strArrays[i]) + 1);
}
}
for (Map.Entry<String, Integer> e : map.entrySet()) {
if (mapRecord.get(e.getKey()) == null || mapRecord.get(e.getKey()) != e.getValue()) {
return false;
}
}
return true;
}
private static int find(String string, String[] keyArray) {
for (int i = 0; i < keyArray.length; i++) {
if (string.equals(keyArray[i])) {
return i;
}
}
return -1;
}
}