您的位置:首页 > 其它

Longest Substring Without Repeating Characters

2015-06-08 15:12 323 查看
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.

看到这题最直接的估计就是枚举法了,每次检验一个字符是否已经在子串中就一个一个对比,然后添加.明显复杂度高了.

然后就可以考虑类似哈希表的解决方案,(前提说下,在LEETCODE判定中大小写估计也是不一样的字符)ascii码总共256个可以申请一个相同大小数组,记录子串中已经出现的字符(比如 如果出现就将其位值变为1,当然使用时你要初始化).

然后使用双指针来选出子串,双指针形象点就像一双筷子,夹在筷子中间的就是现在正在测试的子串了,如果出现重复的字符,就计算这次子串的长度temlen然后与maxlen进行对比,选大的作为maxlen值.最后开始准备下次测试的子串,需要 将头指针移到重复字符的后一位置,同时将hash表中的移动过程中的相应字符位初始化.

代码如下:

int lengthOfLongestSubstring(char* s) {
int hash[256] ={0};
char *head , *ptr ;
head = ptr = s;
int temlen , maxlen ;
int i ;
temlen = maxlen = 0 ;

while(*ptr!='\0')
{
if(hash[ *ptr - ' '] ==0 )
{   hash[*ptr - ' ']= 1;
ptr++;

}
else
{    temlen = ptr - head ;
maxlen =maxlen>temlen?maxlen : temlen;
for( ;*head != *ptr ;head++)
hash[*head -' '] = 0   ;

hash[*head -' '] =0;
head++;

}
}

temlen = ptr - head  ;
maxlen =maxlen>temlen?maxlen : temlen;
return(maxlen);

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