Hard-题目41:76. Minimum Window Substring

转载 2016年05月31日 23:49:33

题目原文:
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

For example,
S = “ADOBECODEBANC”
T = “ABC”
Minimum window is “BANC”
题目大意:
给出一个字符串S和字符串T,在S中寻找一个长度最短的子串,使其包含T中所有的字符,要求在O(n)内完成。
题目分析:
首先使用HashMap记录T串中每个字母出现的次数(也可以简化为char数组). 在S中用[l,r]代表滑动窗口。S中,每次循环r右移1位,然后判断r右移之后所指向的字符是否在Hash表中出现过:如果出现过,则表示在T中。此时通过计数器cnt判断T中字符是否都出现过,如果是,则记录l和r之间子串长度,并与最短长度比较。然后逐步右移l并在Hash表中删除l指向的字符直到计数器cnt小于T中字符数量。
注意一下,由于T中同一字符的数量可能减到负值,因此需要2重判断:先判断是否出现此字符,在判断此字符出现的具体数量。
源码:(language:cpp)

class Solution
 {
 public:
     string minWindow(string S, string T)
     {
         int c[128] = {0};
         bool flag[128] = {false};
         for(int i = 0; i < T.size(); ++ i)
         {
             flag[T[i]] = true;
             ++ c[T[i]];
         }

         int cnt = 0, l = 0, minl = 0, minsize = S.size() + 1;

         for(int r = 0; r < S.size(); ++ r)
             if(flag[S[r]])
         {
                 if(-- c[S[r]] >= 0)
                     ++ cnt;

                 while(cnt == T.size())
                 {
                     if(r - l + 1 < minsize)
                         minl = l, minsize = r - l + 1;
                     if(flag[S[l]])
                         if(++ c[S[l]] > 0)
                             -- cnt;
                     ++ l;
                 }
             }

         if(minsize > S.size())
             return "";
         return S.substr(minl, minsize);
     }
 };

成绩:
16ms,53.63%,12ms,23.77%

相关文章推荐

Leetcode 76. Minimum Window Substring 最小子串窗口 解题报告

1 解题思想这题是说在S串当中,找出一个最小的窗口,这个窗口正好包含了T中的所有字符。其中在S当中只要包含了T的所有字符(包括出现的次数也要满足)就可以了,可以有多余的字符,顺序也不限制。基本思想就是...
  • MebiuW
  • MebiuW
  • 2016年05月20日 23:28
  • 626

[LeetCode]76.Minimum Window Substring

题目Given a string S and a string T, find the minimum window in S which will contain all the character...

76. Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

[leetcode]76. Minimum Window Substring@Java解题报告

https://leetcode.com/problems/minimum-window-substring/#/description Given a string S and...

76. Minimum Window Substring, leetcode

题目: Given a string S and a string T, find the minimum window in S which will contain all the ch...

LeetCode_OJ【76】Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters ...
  • hb_peng
  • hb_peng
  • 2016年04月26日 12:00
  • 115

LeetCode --- 76. Minimum Window Substring

题目链接:Minimum Window Substring Given a string S and a string T, find the minimum window in S which w...
  • makuiyu
  • makuiyu
  • 2015年03月23日 21:26
  • 1864

LeetCode 76 Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

LeetCode 76. Minimum Window Substring 滑动窗口 *****

一、题目 Given a string S and a string T, find the minimum window in S which will contain all the chara...

LeetCode 76. Minimum Window Substring(最小窗口子串)

原题网址:https://leetcode.com/problems/minimum-window-substring/ Given a string S and a string T, find...
  • jmspan
  • jmspan
  • 2016年05月22日 05:19
  • 230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目41:76. Minimum Window Substring
举报原因:
原因补充:

(最多只允许输入30个字)