Interview Question
Country: United States
bool all_found(int* arr, std::map<char, int>& charmap)
{
for (std::map<char, int>::const_iterator it = charmap.begin(); it != charmap.end(); ++it)
{
char c = it->first;
int v = it->second;
if (arr[c - 'a'] < v)
return false;
}
return true;
}
int min_length(std::string s, std::string pattern)
{
std::map<char, int> charmap;
for (int i = 0; i < pattern.length(); ++i)
{
char c = pattern[i];
if (charmap.find(c) != charmap.end())
charmap.insert(std::make_pair<char, int>(c, 1));
else
charmap[c]++;
}
int arr[26] = {0};
int min_length = s.length() + 1;
std::string min_string;
int i = 0, p = 0;
int l = s.length();
while (p < l)
{
char c = s[p];
if (charmap.find(c) != charmap.end())
{
arr[c - 'a']++;
while (all_found(arr, charmap))
{
int length = p - i + 1;
if (length < min_length)
{
min_length = length;
min_string = s.substr(i, length);
}
arr[s[i] - 'a']--;
++i;
}
}
++p;
}
if (min_length < l)
{
std::cout << min_string << "\n";
}
return min_length;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::string s = "adobecodebanc";
std::string p = "abc";
std::cout << min_length(s, p);
getchar();
}
#include<stdio.h>
- Anonymous April 01, 2014#include<conio.h>
{
int a,b;
add(a+b);
getch();
}