LeetCode 76. Minimum Window Substring调试模板-wowAC

此代码为了方便大家调试用,使用的时候直接用自己的Solution类覆盖代码中的类,程序的输入文件路径默认在桌面的data_in.txt,使用的时候直接将LeetCode的case复制进文件即可。如下图所示。

image.png

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

/***************改成自己的代码****************/
class Solution {
public:
    string minWindow(string s, string t) {
        string res = "";
        int i = 0, j = -1;
        int num_appear = 0;   //i - j内出现的t的字符的个数
        int hash1[300], hash2[300];  //分别是[i, j]字母出现的次数和t中出现的字母
        memset(hash1, 0, sizeof(hash1));
        memset(hash2, 0, sizeof(hash2));
        for(int i=0; i<t.length(); i++) hash2[t[i]] += 1;
        while(1) {
            while(j+1<s.length()&&num_appear<t.length()) {
                hash1[s[j+1]] += 1;
                if(hash1[s[j+1]] == hash2[s[j+1]])
                    num_appear += hash2[s[j+1]];
                j++;
            }
            if(num_appear==t.length() && (res=="" || res.length() > j-i+1))
                res = s.substr(i, j-i+1);
            if(i == s.length()) break;
            hash1[s[i]]--;
            if(hash1[s[i]]==hash2[s[i]]-1)
                num_appear-=hash2[s[i]];
            i++;
        }
        return res;
    }
};
/***************到此为止****************/

int main()
{
    //改成自己的输入路径,注意用双斜杠分割 默认输入文件为桌面的data_in.txt
    fstream fin("C:\\Users\\xingxing\\Desktop\\data_in.txt");
    string word1, word2;
    Solution solu;
    int kase = 1;
    while(getline(fin, word1)) {
        if(line == "") continue;
        getline(fin, word2);
        word1 = word1.substr(1, word1.length()-2);
        word2 = word2.substr(1, word2.length()-2);

        cout<<"case"<<kase++<<": "<<endl;
        cout<<"[\"";
        cout<<solu.minWindow(word1, word2);
        cout<<"\"]"<<endl;
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注