#include <algorithm>
using namespace std;
//
#define MAX_CHAR_COUNT 256
//
int MaxSubString(char* _pstrSrc, char*& _pBegin, int & _iLength)
{
char* pcPos[MAX_CHAR_COUNT] = {0};
char* p = _pstrSrc;
char c = 0;
char* pBegin = _pstrSrc;
int iMaxLen = 0;
while ((c=(*p++)) != '\0')
{
if (pcPos[c] >= pBegin)
{
pBegin = pcPos[c]+1;
iMaxLen = p-pBegin;
pcPos[c] = p-1;
}
else
{
pcPos[c] = p-1;
iMaxLen++;
}
if (iMaxLen > _iLength)
{
_pBegin = pBegin;
_iLength = iMaxLen;
}
}
return 0;
}
//
void CodeWrapper()
{
char cSrc[] = "bfbcdgef";//bbcdebfge"; //bbcdebfbcdgef
int iMaxLen = 0;
char* pBegin = NULL;
MaxSubString(cSrc, pBegin, iMaxLen);
printf("%d\n", iMaxLen);
copy(pBegin, pBegin+iMaxLen, ostream_iterator<char>(cout, ""));
}