这一类型的string相关的题目需要记录某个区间内字符出现的次数,需要用到hashtable。
1. Longest substring without repeating characters
i, j 来记录字字符串窗口,用exist table 记录当前字符是否在substring窗口内出现过,j++直到S[j]在当前字窗口内出现过。然后i++如果 S[i]和S[j]不一样,i++, S[i]重置为没有出现过。
2. Minimum Window Substring
两个表 一个needtofind 需要找的元素的个数,根据模式串计算得来;一个hastofind 已经找到的元素个数,根据当前window里的字符数算出。两个指针 begin end分别是窗口的起止点。 当已经找到的有效元素等于模式串的长度时,一个解已经形成,记录下来。如果begin的元素对结果没作出贡献(属于模式串而且has>needed) begin要++
3. substring of all concatenations of all words
在S中找到T中所有words的concatenation,
假设word的长度是k,可以将S切成以k为单位长度的段, 例如”barfoothefoobarman”, ["foo","bar"], 第一次从第0个开始bar foo the foo bar man, 第二次从第1个字符开始arf oot hef oob arm, 第三次rfo oth efo oba rma, 这样只需要k次循环。 同上一道题一样,也许要两个table来记录当前字符串被访问的次数和期望被访问的次数。不同的是,这道题不需要最大窗口,而是有一个固定的窗口大小(T中word的个数)。
这是我在网上看到的最好的leetcode总结。干净漂亮。
回复删除