在英文字符串中找第一个最长不含重复字符的子串高效实现(修改版)
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;
}
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;
}
相关文章推荐
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 百度面试题 求字符串中不含重复字符的最长子串长度
- 求字符串中不含重复字符的最长子串的长度
- 求字符串中不含重复字符的最长子串
- 求字符串中不含重复字符的最长子串的长度
- 字符串最长不含重复字符的子串长度
- 求字符串最长不含重复字符的子串长度
- C++找出字符串中最长的不含重复字符的子串
- 求字符串中最长无重复字符的子串
- 【LeetCode题目记录-3】字符串中最长的没有重复字符的子串
- c语言实现 在一个字符串中找到由同一个字符组成的最长子串
- 贪心法应用:不含重复字符的最长子串
- 求字符串内不包含重复字符的最长子串的集合
- JS实现查找字符串中第一个不重复的字符
- Python实现针对给定字符串寻找最长非重复子串的方法
- 求字符串的不重复字符的最长子串长度的问题
- 字符串中最长无重复字符的子串
- Longest Substring Without Repeating Characters 不含重复字符的最长子串
- 给定一个字符串,找到最长的子串的长度没有重复字符