#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, "" ));
}
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, "" ));
}