76. Minimum Window Substring

来源:互联网 发布:手机如何彻底卸载软件 编辑:程序博客网 时间:2024/05/17 06:49

这题说两点,第一是做法。2point,先绑定j,然后i往后移动,ok就判断比较大小,然后j往后移动。判断是用hash table 维护visit标记和mark数目数组。
第二点是关于int 和 s.length()的比较,这个会错误的!!!所以一定要加上(int)s.length
因为size type 有可能会错!
应该是出现警告,即warning,而不是错误error.
C,C++在有符号数和无符号数之间的运算时,会先把数都转成无符号数,再运算,因此,如果i=-1,那么转成无符号数就是0xFFFFFFFF,就会出现-1>2这样的情况,所以VC对这种情况会有warning,提醒你注意.

class Solution {public:    string minWindow(string s, string t) {        if(s.length() == 0 || t.length() == 0)            return "";        bool visit[128] = {false};        int mark[128] = {0};        int count = t.length();        int i = -1, j = 0;        int minlen = INT_MAX, minid = 0;        for(int k = 0; k < t.length(); ++ k){            visit[t[k]] = true;             mark[t[k]] ++;        }        while(i < (int)s.size() && j < (int)s.size()){            if(count){                i++;                mark[s[i]]--;                if(visit[s[i]] && mark[s[i]] >= 0)                    count--;            }            else{                if(minlen > i - j + 1){                    minlen = i - j + 1;                    minid = j;                }                mark[s[j]]++;                if(visit[s[j]] && mark[s[j]] > 0)                    count++;                j++;            }        }        if(minlen == INT_MAX) return "";        return s.substr(minid, minlen);    }};
0 0
原创粉丝点击