欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

3. Longest Substring Without Repeating Characters----LeetCode,

来源: javaer 分享于  点击 38614 次 点评:237

3. Longest Substring Without Repeating Characters----LeetCode,


3. Longest Substring Without Repeating Characters

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.

题目翻译:给定一个字符串,找出最长的没有重复字符的子字符串,输出该字串长度。例如

“abcabcbb”    最长不重复字串是”abc“     返回长度: 3

”bbbbb“         最长不重复字串是”b“         返回长度: 1

解题思路:利用hash表

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int maxlen=0;
        int n=s.length();
        int *next = new int[n];
        int *first = new int[n+1];
        first[n]=n;
        int hash[256];
        memset(hash,n,sizeof(hash));
        for(int i=n-1;i>=0;i--){
            next[i]=hash[s[i]];
            hash[s[i]]=i;
            if(next[i]<first[i+1])
                first[i]=next[i];
            else
                first[i]=first[i+1];
        }
        for(int i=0;i<n;i++){
            if(first[i]-i>maxlen)
                maxlen=first[i]-i;
        }
        delete[]next;
        delete[]first;
        return maxlen;
    }
};

还有一种简单一些的解法,参考点击打开链接

int lengthOfLongestSubstring(string s) {
        vector<int> dict(256, -1);
        int maxLen = 0, start = -1;
        for (int i = 0; i != s.length(); i++) {
            if (dict[s[i]] > start)
                start = dict[s[i]];
            dict[s[i]] = i;
            maxLen = max(maxLen, i - start);
        }
        return maxLen;
    }





相关文章

    暂无相关文章

用户点评