题目:给一个字符串s1,和一个小串s2,求算法能在s1中找到包含s2里所有字符的最小子串。比如:s1 = “ADOBECODEBANC”s2 = “ABC”
最小子串是 “BANC”,要求O(N)的算法。
分析:设置两个指针p1,p2,初始化指向s1串的开头。当p1, p2指针之间的s1子串字母包含s2全部字符时,p1++,当两个指针之间的子不完全包含s2中的全部字符时p2++(增加指针间距),与此同时记录合法包含子串的的最小串的起始位置。在进行上述伸缩时,如何快速的记录s2串的包含情况?使用一个hash 表,记录字符的出现次数,当p1++时,将对应字母的计数减1,当p2++时,将对应字母的计数加1。
int FindMinSubString(char* s1, char* s2)
{
int hash_table[256];
/*
初始化 hash 表,s2中出现的字符标记为0,
其他标记为负数
*/
for (int i=