给你一个字符串 s
、一个字符串 t
,返回 s
中涵盖 t
所有字符的最小子串。如果 s
中不存在涵盖 t
所有字符的子串,则返回空字符串 ""
。
首先是做一个滑动的窗口,然后新建一个字典map,把我们需要匹配的字符串的内容全部放进去,key是值本身,value就是里面有几个这样的值。
窗口一直向右滑动,都是写在while循环中的,当r小于字符串s的长度的时候一直进行这项工作。
如果字典中有对应的元素,就可以往字典中覆盖一个键值对,将value的值减一。
为了方便看什么时候元素已经全部找到了,调用一个map的size属性,得到我们还需要找几个元素出来。
所以,在我们看到某个key的value值为0的时候,就可以把map的size减一。
当map的size为0的时候,也就是现在的窗口中已经包含有我们所有需要的元素,就可以试着将左边的窗口也向右挪动,缩小窗口的大小以得到最小子串。
当map的size为0的时候,就可以看一下当前字符串是怎么样的,用substring来分隔字符串,左包含右不包含,如果当前的字符串为空,或者是我们新找到的字符串的长度要小于之前的字符串长度,就取最新的字符串为我们需要的。这时候将最左边的元素读取到,看一下map字典中是否有这个元素,有的话说明我们的窗口移动会确实一个元素,这样就需要更新一下字典中对应的value值,将其加一。如果这个value值已经是1了,那么map的长度就需要加1了。
在map的size为零的前提下,