题解 | #寻找完成任务所需最短时间#
寻找完成任务所需最短时间
https://www.nowcoder.com/practice/107342346ad44329a35c7e5b890e7d40
考察的知识点:哈希;
解答方法分析:
- 首先,初始化变量
count为字符串t的长度,表示需要匹配的字符数量。 - 创建一个哈希表
map,用于记录字符串t中每个字符的出现次数。 - 使用双指针
left和right分别指向字符串s的起始位置。 - 初始化结果字符串
result为空字符串,string_len为最大整数值,用于记录最小窗口的长度。 - 进入主循环,判断右指针是否越界:若没有越界,检查指针 right 所指向的字符是否在哈希表中:若在哈希表中,将该字符的出现次数减1,并判断是否大于等于0。若是,则表示匹配到了一个需要的字符,将计数器 count 减1。右指针向右移动一位。进入内循环,判断计数器 count 是否为0:若为0,说明窗口包含了字符串 t 中的所有字符。检查左指针所指向的字符是否在哈希表中:若存在,将该字符的出现次数加1,并判断是否大于0。若是,则表示窗口中除了一个需要的字符,将计数器 `count 加1。左指针向右移动一位。更新窗口长度,若当前窗口长度小于记录的最小长度 string_len,则更新 string_len 和 result。
- 返回窗口长度是否为最大整数值,若是,则返回空字符串
"",否则返回最小窗口字符串result。
ai.hxkj.vip
AI如风,常伴吾身
所用编程语言:C++;
完整编程代码:↓
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return string字符串
*/
string minWindow(string s, string t) {
int count = t.length();
unordered_map<char, int> map;
for (char c : t) {
map[c]++;
}
int left = 0;
int right = 0;
string result = "";
int string_len = INT_MAX;
while (right < s.length()) {
if (map.find(s[right]) != map.end()) {
map[s[right]]--;
if (map[s[right]] >= 0) {
count--;
}
}
right++;
while (count == 0) {
if (map.find(s[left]) != map.end()) {
map[s[left]]++;
if (map[s[left]] > 0) {
count++;
if (right - left < string_len) {
string_len = right - left;
result = s.substr(left, string_len);
}
}
}
left++;
}
}
return string_len == INT_MAX ? "" : result;
}
};

