[leetcode] 3. Longest Substring Without Repeating Characters

原创 2015年11月18日 20:20:46

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.

这道题找字符串中不重复字符的最长子串长度,难度为Medium。

  • 首先想到的是用HashTable。从字符串头部开始计算子串,将没有重复出现的字符存入HashTable中,如果遇到相同的字符,表明当前不重复子串已经结束,从HashTable中查到的重复字符位置开始重新计算子串,比较确定此子串是否是当前最长的,遍历整个字符串后得到不重复字符的最长子串长度。具体代码:
    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            unordered_map<char, int> hash;
            int maxLen = 0;
            int pos = -1;
            
            for(int i=0; i<s.size(); i++) {
                auto it = hash.find(s[i]);
                if((it != hash.end()) && (it->second >= pos)) {
                    pos = it->second;
                }
                hash[s[i]] = i;
                maxLen = max(maxLen, i-pos);
            }
            
            return maxLen;
        }
    };
  • 通过之后查看了别人的代码,发现有不用HashTable的方法,非常巧妙,用字符ascii码做下标把字符位置存入vector中,避免使用HashTable,效率上有所提高,复制其代码供大家参考:
    class Solution {
    public:
        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;
        }
    };
版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode Algorithms 3. Longest Substring Without Repeating Characters 题解

题目: Given a string, find the length of the longest substring without repeating characters.

《LeetBook》leetcode题解(3):Longest Substring Without Repeating Characters[M]——哈希判断重复

003. Longest Substring Without Repeating Characters[M]题目:Given a string, find the length of the long...

LeetCode 3. Longest Substring Without Repeating Characters--不包含重复字符的最长子串长度

Given a string, find the length of the longest substring without repeating characters. Examples: Giv...

[Leetcode #3]Longest Substring Without Repeating Characters 无重复字符的最长子串

原题地址:https://leetcode.com/problems/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...

Leetcode 3. Longest Substring Without Repeating Characters The Solution of Python and Javascript

Given a string, find the length of the longest substring without repeating characters.Examples:Given...

[LeetCode-Java]3. Longest Substring Without Repeating Characters

Given a string, find the length of the 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 exam...

LeetCode | 3)Longest Substring Without Repeating Characters

题目Given a string, find the length of the longest substring without repeating characters. Examples:...

LeetCode 3:Longest Substring Without Repeating Characters

Question: 双指针,移动窗口问题。维护一个[st,etd)的窗口,不断向右进行滑动,当[st,etd)不包含etd位置上的字符时,将etd位置上的字符加入[st,etd)->[st,etd]...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode] 3. Longest Substring Without Repeating Characters
举报原因:
原因补充:

(最多只允许输入30个字)