您的位置:首页 > 其它

在英文字符串中找第一个最长不含重复字符的子串高效实现(修改版)

2011-12-27 17:39 585 查看
<!--

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: