<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> char * GetSubStr( const char * str )
{
int hash[ 256 ]; // hash记录每个字符的出现位置
int i;
for ( i = 0 ;i < 256 ;i ++ )
hash[i] =- 1 ;
int CurrentStart = 0 ,MaxStart = 0 ,MaxEnd = 0 ,MaxLength = 0 ,CurrentLength = 0 ,strLen = strlen(str);
for (i = 0 ;i < strLen;i ++ )
{
if (CurrentStart > hash[str[i]]) // 如果没有重复
{
hash[str[i]] = i;
}
else
{
CurrentLength = i - CurrentStart; // 当前长度
if (CurrentLength > MaxEnd - MaxStart) // 如果当前长度最长
{
MaxEnd = i;
MaxStart = CurrentStart;
}
CurrentStart = hash[str[i]] + 1 ; // 更新当前最长的起点
hash[str[i]] = i; // 更新字符出现的位置
}
}
// 增加的代码
if ( strLen - CurrentStart > CurrentLength)
{
MaxEnd = strLen;
MaxStart = CurrentStart;
}
//
MaxLength = MaxEnd - MaxStart;
char * reStr = new char [MaxLength + 1 ];
reStr[MaxLength] = 0 ;
memcpy( reStr,str + MaxStart,MaxLength );
return reStr;
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> char * GetSubStr( const char * str )
{
int hash[ 256 ]; // hash记录每个字符的出现位置
int i;
for ( i = 0 ;i < 256 ;i ++ )
hash[i] =- 1 ;
int CurrentStart = 0 ,MaxStart = 0 ,MaxEnd = 0 ,MaxLength = 0 ,CurrentLength = 0 ,strLen = strlen(str);
for (i = 0 ;i < strLen;i ++ )
{
if (CurrentStart > hash[str[i]]) // 如果没有重复
{
hash[str[i]] = i;
}
else
{
CurrentLength = i - CurrentStart; // 当前长度
if (CurrentLength > MaxEnd - MaxStart) // 如果当前长度最长
{
MaxEnd = i;
MaxStart = CurrentStart;
}
CurrentStart = hash[str[i]] + 1 ; // 更新当前最长的起点
hash[str[i]] = i; // 更新字符出现的位置
}
}
// 增加的代码
if ( strLen - CurrentStart > CurrentLength)
{
MaxEnd = strLen;
MaxStart = CurrentStart;
}
//
MaxLength = MaxEnd - MaxStart;
char * reStr = new char [MaxLength + 1 ];
reStr[MaxLength] = 0 ;
memcpy( reStr,str + MaxStart,MaxLength );
return reStr;
}