C++ Solution 68ms explanation
\nWe are going to use a two pointer approach to solve this.\n\nThe idea here is that \n1. We will store the characters of t in a map lets say mapt.\n2. We will 
```\nWe are going to use a two pointer approach to solve this.\n\nThe idea here is that \n1. We will store the characters of t in a map lets say mapt.\n2. We will have two pointers l and r.\n3. Whille we traverse through s we check if the character is found in mapt If so we will store the character into another hash map lets say maps.\n4. If the mapped charcter freq of s is less than or equal to mapt we increment a letter counter variable that will let us know when we have reached the t string size.\n5. We try to find the smallest substring which contains all chracters in t using a while loop.\n\n S = "ADOBECODEBANC" and T = "ABC"\n\n mapt\n A -> 1\n B -> 1\n C -> 1\n\n We keep l=0 and traverse S with r.\n\n "ADOBECODEBANC"\n  ^\n  |\n  r \n\nas A is present in t we use another map for s to store A into the hashmap\n\nmaps\nA->1\nwe have another variable lettercounter that keeps track of the size.\nlettercounter\n1\n\n "ADOBECODEBANC"\n   ^\n   |\n   r\nAs D isnt present in t we just continue traversing.\n\n "ADOBECODEBANC"\n    ^\n    |\n    r\nSame as the above step.\n\n "ADOBECODEBANC"\n     ^\n     |\n     r   \nAs B is present in map t\n\nmaps\nA->1\nB->1\n\nlettercounter\n2\n\n "ADOBECODEBANC"\n      ^\n      |\n      r\n "ADOBECODEBANC"\n       ^\n       |\n       r\nC is present in mapt\n\nmaps\nA->1\nB->1\nC->1\n\nlettercounter\n3\nas lettercount is equal to t.size We will try shortening the substring\n\nAs there is only 1 A in s and t and A is the first character we cant reduce the size.\n\nSo out best bet currently would the substring\nans=  "ADOBEC"\n\nWe continue traversing and checking the above steps.\n\n\n    string minWindow(string s, string t) {\n        unordered_map<char,int> map1;\n        unordered_map<char,int> map2;\n        int check=INT_MAX;\n        string result;\n        for(char &ch:t)map1[ch]++;\n        int slow=0,fast=0,lettercounter=0;\n        for(;fast<s.length();fast++)\n        {\n            char ch=s[fast];\n            if(map1.find(ch)!=map1.end())\n            {\n                map2[ch]++;\n            if(map2[ch]<=map1[ch])\n                lettercounter++;\n            }\n            if(lettercounter>=t.length())\n            {\n                while(map1.find(s[slow])==map1.end()||map2[s[slow]]>map1[s[slow]])\n                {\n                    map2[s[slow]]--;\n                    slow++;\n                }\n                if(fast-slow+1<check)\n                {\n                    check=fast-slow+1;\n                    result=s.substr(slow,check);\n                }\n            }\n        }\n        return result;\n    }\n```
['C', 'C++']