public String minWindow(String S, String T) {
if (T.length() > S.length())
return "";
HashMap<Character, Integer> set = new HashMap<>();
for (int i = 0; i < T.length(); i++) {
if (!set.containsKey(T.charAt(i))) {
set.put(T.charAt(i), 1);
} else {
set.put(T.charAt(i), set.get(T.charAt(i)) + 1);
}
}
int count = 0;
int min = Integer.MAX_VALUE;
int begin = 0;
int end = 0;
LinkedList<Integer> index = new LinkedList<>();
HashMap<Character, Integer> record = new HashMap<>();
for (int i = 0; i < S.length(); i++) {
Character tmp = S.charAt(i);
if (set.containsKey(tmp)) {
index.add(i);
if (record.containsKey(tmp)) {
record.put(tmp, record.get(tmp) + 1);
} else {
record.put(tmp, 1);
}
int num1 = record.get(tmp);
int num2 = set.get(tmp);
if (num1 == num2) {
count++;
}
if (count == set.size()) {
Character head = S.charAt(index.peek());
while (record.get(head) > set.get(head)) {
record.put(head, record.get(head) - 1);
index.remove();
head = S.charAt(index.peek());
}
if (index.getLast() - index.peek() < min) {
min = index.getLast() - index.peek();
begin = index.peek();
end = index.getLast();
}
}
} else {
continue;
}
}
if (min == Integer.MAX_VALUE) {
return "";
} else {
return S.substring(begin, end + 1);
}
}
Это мой код одной проблемы с Leetcode. Но я не думаю, что это связано с проблемой алгоритма. Поэтому я размещаю его здесь. Здесь проблема:
Я использую запись «hashmap» для записи дублированных символов в S и еще одну «установленную» для записи дублированных символов в T. Когда число дублированных символов равно, плюс один для переменной " рассчитывать ";
я прошел все испытания, кроме последнего S является строка длины 100000 и Т представляет собой строку с длиной 10001.
Я должен использовать эту форму:
Может ли кто-нибудь понять, почему здесь нельзя сравнивать два «Целых»?
int num1 = record.get(tmp);
int num2 = set.get(tmp);
if (num1 == num2) {
count++;
}
вместо:
if(record.get(tmp)==set.get(tmp)){
count++;
}
Только так могут сравниваться два целых числа или «счет» не будет транслироваться. Почему первые 265 тестовых примеров могут пройти, но последняя большая строка вызывает проблему? Заранее спасибо.
@deathlee, ваша проблема решена? –