码迷,mamicode.com
首页 > Windows程序 > 详细

LeetCode OJ--Minimum Window Substring ***

时间:2014-08-17 12:55:42      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   for   ar   div   

https://oj.leetcode.com/problems/minimum-window-substring/

模拟题

这道题细节比较多。从左到右扫一遍模拟着做

 class Solution {
public:
    string minWindow(string S, string T) {
        string ans = "";
        if(S.size() < T.size() )
            return ans;
        
        unordered_map<char,int> count;
        unordered_set<char> charInT;
        unordered_map<char,int> countT;
        
        for(int i = 0; i < T.size(); i++)
        {
            charInT.insert(T[i]);
            countT[T[i]]++;
        }
        
        int ansI = 0, ansJ = 0;
        // 先找第一个合法的
        for(int i = 0; i < S.size(); i++)
        {
            if(charInT.find(S[i]) != charInT.end())
            {
                count[S[i]]++;
                // 如果都找到了
                if(count.size() == countT.size())
                {
                    bool flag = true;
                    for(unordered_map<char,int>::iterator itr = countT.begin(); itr != countT.end(); itr++)
                    {
                        if(itr->second > count[itr->first])
                            flag = false; // 还没都匹配
                    }
                    if(flag)
                    {
                        ansJ = i;
                        ans = S.substr(ansI,ansJ+1);
                        break;
                    }
                }
            }
        }
        // 往后遍历
        for(int m = 0; m < S.size(); m++)
        {
            if(charInT.find(S[m]) == charInT.end())
                ansI++; // 往前走1个是安全的
            else 
            {
                count[S[m]]--;
                if(count[S[m]] >= countT[S[m]])
                    ansI++;
                else
                {
                    if(ans.size() > ansJ - m + 1)
                        ans = S.substr(m,ansJ - m +1);
                    // find new end
                    int temp = ansJ;
                    temp++;
                    while(temp<S.size() && S[temp] != S[m])
                    {
                        if(charInT.find(S[temp]) != charInT.end())
                            count[S[temp]]++; // 记录新加进来了合法的
                        temp++;
                    }
                    if(temp == S.size()) // 到了最后也没找到
                    {
                        return ans;
                    }
                    else
                    {
                        ansJ = temp;
                        count[S[temp]]++;
                    }
                }
            }
        }
    }
};

 

LeetCode OJ--Minimum Window Substring ***,布布扣,bubuko.com

LeetCode OJ--Minimum Window Substring ***

标签:style   blog   http   color   io   for   ar   div   

原文地址:http://www.cnblogs.com/qingcheng/p/3917576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!