给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含复杂度为O(n)的T中的所有字符。
例:
输入: S =“ADOBECODEBANC”, T =“ABC”
输出: “BANC”
注意:
如果S中没有覆盖T中所有字符的窗口,则返回空字符串""。
如果有这样的窗口,则保证在S中始终只有一个唯一的最小窗口。
例子:
var minWindow = function(s, t) {
let rObj = {};
let obj = {};
function item(index = 0) {
for (let i = index; i < s.length; i++) {
if (t.includes(s[i])) {
let reg = new RegExp(s[i], "g");
let reg2 = new RegExp(s[i], "g");
let isT =
(Object.values(obj).join("").match(reg2) || []).length <
(t.match(reg) || []).length;
if (!Object.values(obj).includes(s[i]) || isT) {
obj[i] = s[i];
let keys = Object.keys(obj);
let values = Object.values(obj);
if (values.length === t.length) {
let start = +keys[0];
let end = +keys[keys.length - 1] + 1;
let str = s.substring(start, end);
rObj[end - start] = str;
delete obj[start];
}
} else {
let objstr = Object.values(obj).join("");
if (objstr.lastIndexOf(s[i]) !== 0) {
obj = {};
obj[i] = s[i];
} else {
obj[i] = s[i];
delete obj[Object.keys(obj)[0]];
}
}
}
}
}
item();
const Rkeys = Object.keys(rObj);
return Rkeys.length > 0 ? rObj[Rkeys.sort((a, b) => a - b)[0]] : "";
};
https://leetcode-cn.com/problems/minimum-window-substring/submissions/