码迷,mamicode.com
首页 > 其他好文 > 详细

Oj练习42——T3 Longest Substring Without Repeating Characters

时间:2015-05-05 19:15:55      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

求一个字符串中不含重复字母的最大子串的长度。

【思路】

1.用临时tmp记录长度,遇到重复字母把tmp当前值赋给要返回的length,tmp归零

比较tmp和length,当tmp>length时,更新length。

2.每个字母向前遍历是否有重复字母,用哈希表。

3.反复提交代码不能通过后看了题目tag,知道需要双指针,用一个begin指向重新计数的开始处,i-begin得到当前长度,

每次遇到重复就把begin赋值为哈希表该字母对应的序号的后一个。

注意:哈希表还要更新重复字母的序号,否则每次都和第一次出现过的比,begin赋值不正确。

【my code】

int lengthOfLongestSubstring(string s) {
        int length=s.size();
        int l=0,tmp=0;
        int begin=0,end=0;
        unordered_map<char,int> charmap;
        for(int i=0; i<length; i++){
            if(charmap.find(s[i])!=charmap.end()){
                if(l<tmp)
                    l=tmp;
                tmp=i-begin;//eg:ohomm
                if(begin<charmap[s[i]]+1)//eg:abba
                    begin=charmap[s[i]]+1;
            }
            charmap[s[i]]=i;
        }
        if(l<tmp) l=tmp;
        return max(l,length-begin);
    }

【总结】

一把辛酸泪!

改了无数遍!最后结果还特别差……哭晕。

技术分享技术分享

看到一个新解法,新开一个数组,排名十分靠前,明天细细分析。

【other code】

int lengthOfLongestSubstring(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        memset(canUse, true, sizeof(canUse));
        
        int count = 0;
        int start = 0;
        int ret = 0;
        for(int i = 0; i < s.size(); i++)
        {
            if (canUse[s[i]])
            {
                canUse[s[i]] = false;
                count++;
            }
            else
            {
                ret = max(ret, count);
                while(true)
                {
                    canUse[s[start]] = true;
                    count--;
                    if (s[start] == s[i])
                        break;
                    start++;
                }
                start++;
                canUse[s[i]] = false;
                count++;
            }
        }
        
        ret = max(ret, count);
        
        return ret;
    }

 

Oj练习42——T3 Longest Substring Without Repeating Characters

标签:

原文地址:http://www.cnblogs.com/ketchups-notes/p/4479599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!