在S中查找包含T

时间:2016-05-20 20:45:37

标签: string algorithm

我对问题中的代码及其在http://articles.leetcode.com/finding-minimum-window-in-s-which

的解决方案有一个具体的问题

在图下面的代码中(不是图中的图),来自for循环的第5行代码

if (hasFound[S[end]] <= needToFind[S[end]])  **// WHY this condition is required???**
    count++;

基于我的理解

1)这个if条件不需要而且只是(只要发现一个char只是增加计数,代表到目前为止找到的字符数)

count++;

2)OR可能是<(而不是<=)并且相等似乎对我没有意义

if (hasFound[S[end]] < needToFind[S[end]])  
    count++; 

我测试过1)和2)但是他们都没有给我所有案例的正确答案。

if条件<=}为我提供了所有案例的正确解决方案。

我真的不明白为什么

if (hasFound[S[end]] <= needToFind[S[end]]) 
应该要求

使这段代码适用于所有情况。

1 个答案:

答案 0 :(得分:0)

想象一下,模式T包含3个字符A和2个字符B. 所以needToFind['A'] = 3
hasFound['A']变为1,2和3

时,您必须增加计数

hasFound['A']变为2时(你关于'&lt;'的命题),窗口只包含两个A字符,不可能生成T,而计数永远不会达到tLen=5

如果完全删除这个条件,5个字符A给count=5=tlen,而窗口仍然不包含任何B