找工時候練習寫的代碼。翻出來了。
今天有朋友指出來程序運行結果錯誤,試了下,果然有問題,在下班途中重新整理了思路,修改了代碼,整體思路不變,就是加了幾行代碼,處理字符串的最後部分。求驗證結果。
順便問下,怎麼取消文章被評論時收到系統通知的郵件呢?
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;
} www.2cto.com
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;
}
作者:ifeng