Here is my C++ code with line by line Explanation as comments
Please Upvote if you find it useful\n\n\nstring minWindow(string s, string t) {\n    \n    //This result variable will store the string which we will return\n  
Please **Upvote** if you find it useful\n\n```\nstring minWindow(string s, string t) {\n    \n    //This result variable will store the string which we will return\n    string result;\n\n    //It will check if any of the two string is empty and return empty string result\n    if(s.empty() || t.empty()){\n        return result;\n    }\n\n    //These 2 unorders maps will store frequency of characters in t string and windows\n    unordered_map<char, int> map;\n    unordered_map<char, int> window;\n\n    //It will update the frequency of each charater of string t int map;\n    for(int i = 0; i < t.length(); i++){\n        map[t[i]]++;\n    }\n\n    //variable to store minimum length of result string\n    int minLength = INT_MAX;\n\n    //counter\n    int letterCounter = 0;\n    \n    for(int slow = 0, fast = 0; fast < s.length(); fast++){\n        \n        //This c variable will store each character of string s according to the fast pointer movement starting from 0\n        char c = s[fast];\n\n        //If current character of "s" is available in map that consists of string "t" characters\n        if(map.find(c) != map.end()){\n            //store that character in current window and increase the counter by 1\n            window[c]++;\n            //This if condition will execute only if there is need to fulfill required charters from map to window and increase the letter counter\n            if(window[c] <= map[c]){\n                letterCounter++;\n            }\n        }\n\n        //This condition we have found the result in current window\n        if(letterCounter >= t.length()){\n            while (map.find(s[slow]) == map.end() || window[s[slow]] > map[s[slow]])\n            {\n                //This will start decreasing frequency of extra character in window\n                window[s[slow]]--;\n\n                //and move slow pointer\n                slow++;\n            }\n\n            //It will update the minimum required substring\n            if(fast-slow + 1 < minLength){\n                minLength = fast - slow + 1;\n                //It will update the result string\n                result = s.substr(slow, minLength);\n            }\n        }\n    }\n    return result;\n}\n```
['Two Pointers', 'C', 'Sliding Window']